Programming/TypeScript

[Understanding TypeScript] Section 1. ์‹œ์ž‘ํ•˜๊ธฐ

yuri lee 2023. 6. 13. 23:23
๋ฐ˜์‘ํ˜•
์ด ๊ธ€์€ udemy์˜ Typescript :๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค์ „ํ˜• ํ”„๋กœ์ ํŠธ๊นŒ์ง€ with React + NodeJS ๊ฐ•์ขŒ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค

 

1. ํ™˜์˜

pass

 

2. TypeScript๋ž€ ๋ฌด์—‡์ด๋ฉฐ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€? 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ superset ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ์–ธ์–ด๊ฐ€ ์•„๋‹Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๊ณผ ์žฅ์ ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ JS๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์ปดํŒŒ์ผ๋Ÿฌ์ž…๋‹ˆ๋‹ค. ํƒ€์ž…์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ๋Ÿฐํƒ€์ž„์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ์ฝ”๋“œ์˜ ์—๋Ÿฌ๋ฅผ ๋ฏธ๋ฆฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ ์ดˆ๊ธฐ์— ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‹จ์ ) ๋ธŒ๋ผ์šฐ์ €์™€ ๊ฐ™์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. node.js๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. 

 

3. ํ•™์Šต ์ปค๋ฎค๋‹ˆํ‹ฐ

pass

 

4. Node.js ๋‹ค์šด๋กœ๋“œ

typescriptlang.org ์—์„œ download๋ฅผ ํด๋ฆญํ•˜์—ฌ ์„ค์น˜ ๋ฐฉ๋ฒ• ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.  / npm ๋„๊ตฌ๋Š” node.js ํŒจํ‚ค์ง€์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.  ์•„๋ž˜ ์„ค์น˜ํ•œ ๊ฒƒ์€  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผ ํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์ž…๋‹ˆ๋‹ค. tsc ๋ช…๋ น์–ด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. 

โžœ  ~ yarn global add typescript
yarn global v1.22.11
[1/4] ๐Ÿ”  Resolving packages...
[2/4] ๐Ÿšš  Fetching packages...
[3/4] ๐Ÿ”—  Linking dependencies...
[4/4] ๐Ÿ”จ  Building fresh packages...

 

๊ธฐ๋ณธ JS ํŒŒ์ผ

const button = document.querySelector("button");
const input1 = document.getElementById("num1");
const input2 = document.getElementById("num2");

function add(num1, num2) {
  return num1 + num2;
}

button.addEventListener("click", function () {
  console.log(add(input1.value, input2.value));
});

 

๋Š๋‚Œํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ์š”์†Œ๋ฅผ ์–ป์„ ๊ฒƒ์ž„์„ ts์—๊ฒŒ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

button → 'button' is possibly 'null' 
→ const button = document.querySelector("button")!;

 

ํ•ญ์ƒ input ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜• ๋ณ€ํ™˜์ด๋ผ๋Š” HTMLInputElement ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์•Œ๋ ค์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

Property 'value' does not exist on type 'HTMLElement'
 → const input1 = document.getElementById("num1")! as HTMLInputElement;

 

๊ฐ€์žฅ ํฐ ๊ธฐ๋Šฅ์€ ํƒ€์ž…์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

function add(num1: number, num2: number) {
  return num1 + num2;
}

 

์ปดํŒŒ์ผ์„ ์‹คํ–‰ํ•ด๋ณธ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. js ํŒŒ์ผ์ด ์ƒ๊ธฐ๊ณ  ์—๋Ÿฌ๋‚œ ๋ถ€๋ถ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โžœ  first-project tsc using-ts.ts 
using-ts.ts:10:19 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.

10   console.log(add(input1.value, input2.value));
                     ~~~~~~~~~~~~


Found 1 error in using-ts.ts:10

 

ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜๊ณ  ๋‹ค์‹œ ์ปดํŒŒ์ผ์„ ํ•ด๋ด…๋‹ˆ๋‹ค. ์—๋Ÿฌ ์—†์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์ƒ์„ฑ๋œ JS๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด TS์—์„œ ์ถ”๊ฐ€ํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค์ด ๋‹ค ์‚ฌ๋ผ์ง€๊ณ  Pure JS๋งŒ ๋‚จ์•„์žˆ๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

button.addEventListener("click", function () {
  console.log(add(+input1.value, +input2.value));
});

 

5. TypeScript Avantages - Overview

- Types

- Next-gen JavaScript Features (compiled down for older Browers)

- Non-JavaSCript Features like Interfaces or Generics

- Meta-Programming Features like Decorators

- Rich Configuration Options

- Modern Tooling that helps even in non-TypeScript Projects

 

6. ๊ฐ•์˜๊ฐœ์š”

1. TypeScript Basics

2. Compiler & Configuration Deep Dive

3. Working with Next-gen JS code

4. Classess & Interfaces

5. Advenced Types & TypeScript Features

6. Generics (๊ณ ๊ธ‰๊ธฐ๋Šฅ)

7. Decorators

8. Time to Practice - Full Project

9. Working with Namespaces & Modules 

10. Webpack & TypeScript / ์›นํŒฉ์€ ๊ทผ๋ž˜ ํ”„๋ก ํŠธ์—”๋“œ ์›น ๊ฐœ๋ฐœ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์ถ•๋„๊ตฌ๋กœ, TS์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๋‚˜์€ ํ”„๋กœ์ ํŠธ ์„ค์ •์ด ๊ฐ€๋Šฅํ•จ

11. Third-Party Libraries & TypeScript 

12. React + TypeScript & NodeJS + TypeScript

 

7. ๊ฐ•์˜ ์ตœ๋Œ€ ํ™œ์šฉํ•˜๋Š” ๋ฒ•

- Watch the Videos!

- Code Along

- Practice

- Debug & Search

- Ask & Answer

 

8. ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ/IDE ์„ค์ •ํ•˜๊ธฐ

 

9. ๊ฐ•์˜ ํ”„๋กœ์ ํŠธ ์„ค์ •

tsc app.ts

์œ„ ๋ช…๋ น์–ด๋ฅผ js ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์ˆ˜๋™์œผ๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.  ์ž๋™์œผ๋กœ ์ด ๊ณผ์ •์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด npm์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. 

 

npm install --save-dev lite-server

--save-dev๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ด๋ฅผ ๊ฐœ๋ฐœ ์ „์šฉ ์ข…์†์„ฑ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ ๋„์ค‘ ๋„์›€์ด ๋  ๋„๊ตฌ์ž„์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. lite-server๋Š” package.json ํŒŒ์ผ ์˜†์— ํ•ญ์ƒ index.html ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ฐœ๋ฐœ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. 

 

{
  "name": "understanding-ts",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "lite-server" // add
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "lite-server": "^2.6.1"
  }
}

 

๋ฐ˜์‘ํ˜•