6/24 TIL (TypeScript ๊ธฐ์ดˆ)

Hwiยท2024๋…„ 6์›” 24์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
55/96

๐Ÿ“– ์ง„ํ–‰ํ•œ ๊ณต๋ถ€ ๐Ÿ“–

  • TypeScript๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „ ์•Œ์•„์•ผ ํ•  ๊ฒƒ๋“ค
  • TypeScript์˜ ์žฅ์  ๋ฐ ๊ธฐ์ดˆ

JavaScript์˜ ์•ฝ์ 

  • 1. ์‹คํ–‰ ์‹œ๊ฐ„์— ๊ฒฐ์ •๋˜๋Š” ๋ณ€์ˆ˜ ํƒ€์ž…
    • JavaScript๋Š” ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ์‹คํ–‰ ์‹œ๊ฐ„์— ๊ฒฐ์ •
    • ์ด์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋กœ ์ธํ•œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์ด ์‰ฝ๊ณ  ์ฐพ๊ธฐ ๊นŒ๋‹ค๋กœ์›€
    • ๋ณ€์ˆ˜ ๊ฐ’, ํƒ€์ž…์„ ๋ชจ๋‘ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€
  • 2. ์•ฝํ•œ ํƒ€์ž… ์ฒดํฌ
    • JavaScript๋Š” ๋ณ€์ˆ˜ / ์ƒ์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์ •๋„์˜ ํ‚ค์›Œ๋“œ๋งŒ ์ง€์›
    • let a = 1; a = "Hello"; ๊ฐ€ ์–ผ๋งˆ๋“ ์ง€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๊ณ  ์•ฝ๊ฐ„์˜ ์‹ค์ˆ˜๋กœ ์˜ˆ์ƒํ•˜์ง€ ์•Š์€ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
  • 3. ๋ฌผ๋ ํ•œ ๊ฐ์ฒด
    ์ž˜๋ชป๋œ ์ฝ”๋“œ ์˜ˆ์‹œ
const obj = { latitude: 11.5, longitude: 47.1 };
const result = obj.latitude * obj.longitute; // ๋ณดํ†ต์€ ์ด๋Ÿฐ ์‹ค์ˆ˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์žก์•„์ค˜์•ผ ๋˜๋Š”๋ฐ
console.log(result) // NaN์ด๋ผ๋Š” ์—‰๋šฑํ•œ ๊ฐ’ ์ถœํ˜„!

๊ฐ์ฒด๋Š” ์บ๋ฆญํ„ฐ๊ฐ€ ํ™•์‹คํ•ด์•ผ ํ•จ
๋ถ•์–ด๋นต์„ ์ฐ๋Š” ํ‹€์—์„œ ์†Œ๋ณด๋ฃจ๋นต์ด ๋‚˜์˜ค๋ฉด ์•ˆ ๋˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ

TypeScript

Microsoft์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

์™œ ๋“ฑ์žฅํ–ˆ๋Š”์ง€?

  • JavaScript์˜ ๋‹จ์ ์„ ์ƒ์‡„ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅ

์žฅ์ 

  • ์ •์˜๋˜์ง€ ์•Š์€ ํ”„๋กœํผํ‹ฐ๋ฅผ ์—ฐ์‚ฐํ•ด NaN์ด ๋˜๋Š” ์ƒํ™ฉ ๋ฐฉ์ง€
  • ๋ถ•์–ด๋นต ํ‹€์—์„œ ๋ถ•์–ด๋นต๋งŒ ๋‚˜์˜ค๊ฒŒ๋”
  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)๋ฅผ ํ•  ๋•Œ JavaScript์— ๋น„ํ•ด ๊ฐ€์ง€๋Š” ํฐ ๋ฉ”๋ฆฌํŠธ
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  growOlder() {
    this.age += 1;
  }
}

const spartan = new Person('Spartan', 30);
spartan.age = 25; // ์™ธ๋ถ€์—์„œ age ์†์„ฑ์„ ๋งˆ์Œ๋Œ€๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์š”! ๋œป๋ฐ–์— ํšŒ์ถ˜?
spartan.growOlder();
console.log(spartan.age); // ๊ฒฐ๊ตญ 1์‚ด์„ ๋” ๋จน์—ˆ์ง€๋งŒ ๋ฅดํƒ„์ด๋Š” 26์„ธ  
  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (C++, Java, C#, ...)์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ํ†ตํ•ด์„œ ํด๋ž˜์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœํผํ‹ฐ์˜ ์บก์Аํ™”๋ฅผ ๋ณด์žฅ / ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๋ฒ”์œ„๋ฅผ ์กฐ์ •

  • d.ts ๋ผ๋Š” ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ์„ ์–ธ ํŒŒ์ผ์„ ํ†ตํ•ด ์™ธ๋ถ€ ๋ชจ๋“ˆ ํƒ€์ž… ์ •๋ณด๋ฅผ ์ œ๊ณต

  • ํ–ฅ์ƒ๋˜๋Š” ์ƒ์‚ฐ์„ฑ

  • ๋†’์•„์ง€๋Š” ์•ˆ์ „์„ฑ

  • ์ค„์–ด๋“œ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

์„ค์น˜
yarn create react-app "ํด๋”๋ช…" --template typescript

ํ˜น์€

  1. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh

  2. nvm install [์„ค์น˜ํ•  ๋…ธ๋“œ ๋ฒ„์ „]

  3. npm -v

  4. npm i typescript -g

  5. tsc

์ปดํŒŒ์ผ๋Ÿฌ, ๊ทธ๋ฆฌ๊ณ  tsc

ํŠน์ • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์ •์  ์–ธ์–ด๋กœ์„œ์˜ ์ •์ฒด์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋„๊ตฌ

์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ทผ๋ณธ์ ์ธ ์—ญํ• 

  • ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ•ด์คŒ

    • TypeScript ์†Œ์Šค ์ฝ”๋“œ์˜ ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰
    • ์ฝ”๋“œ์—์„œ ํƒ€์ž… ๊ด€๋ จ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ๋ฆฌ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ˆ˜์ • ๊ฐ€๋Šฅ
  • ์ฝ”๋“œ ๋ณ€ํ™˜

    • tsc๋Š” TypeScript -> JavaScript ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™˜
    • C์–ธ์–ด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” C์–ธ์–ด -> ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ ๋ณ€ํ™˜
    • ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ดํ•ดํ•˜๋ฉด ๋ณ€ํ™˜๋œ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋Š”์ง€
      ์˜ˆ์ธก์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋””๋ฒ„๊น… ๊ณผ์ •์—์„œ ํฐ ๋„์›€์ด ๋จ

์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋งค๋ ฅ

  • ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ํ•ด์„ํ•  ๋•Œ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

    • ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์†Œ์Šค ์ฝ”๋“œ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ์„ ํ•˜๊ธฐ์— ์ด๋ฅผ ํ•ด์„ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
  • ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋์€ ์ตœ์ ํ™”

    • ์ฝ”๋“œ๊ฐ€ ์ตœ์ ํ™”๋˜๋ฉด ์ „๋ฐ˜์ ์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋” ๋นจ๋ผ์ง, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋Ÿฐ ๊ฑธ ์ž๋™์œผ๋กœ ๋„์™€์ฃผ๋Š” ์œ ์ตํ•œ ์นœ๊ตฌ

tsc์— ๋Œ€ํ•ด์„œ
JavaScript๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜๋  ํ•„์š” X
๋™์  ์–ธ์–ด (= ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด)์ด๊ธฐ ๋•Œ๋ฌธ

  • ์ •์  ์–ธ์–ด (์ปดํŒŒ์ผ ์–ธ์–ด) -> ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ ๋˜์–ด์•ผ ํ•จ

  • ๋™์  ์–ธ์–ด (์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด) -> ์—”์ง„์ด ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ์‹คํ–‰ํ•˜๋ฉด์„œ ๋™์ ์œผ๋กœ ํ•ด์„

tsc ์ฃผ์š” ๋ช…๋ น์–ด

  • tsc --init : tsconfig.json์ด ์ƒ์„ฑ๋˜๋Š” ๋ช…๋ น์–ด

  • tsc index.ts : index.ts๋ฅผ ์ปดํŒŒ์ผ

  • tsc src/*.ts : src ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ts ํŒŒ์ผ์„ ์ปดํŒŒ์ผ

  • tsc index.js --declaration --emitDeclarationOnly : @types ํŒจํ‚ค์ง€๋ฅผ ์œ„ํ•œ .d.ts ํŒŒ์ผ ์ƒ์„ฑ

tsconfig.json ํ•ด๋ถ€ํ•˜๊ธฐ

  • compilerOptions - strict์˜ต์…˜์€ true๋กœ ์„ค์ •ํ•ด์ฃผ์‹œ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ

  • compilerOptions - sourceMap์˜ต์…˜์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ true๋กœ ์„ค์ •ํ•ด์ฃผ์‹œ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ

tsc --init ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ
TypeScript ํ”„๋กœ์ ํŠธ์˜ ์„ค์ • ํŒŒ์ผ
์ปดํŒŒ์ผ ์˜ต์…˜ ๋ฐ ์ž…๋ ฅ ํŒŒ์ผ๋“ค์„ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

compilerOptions - targer ์˜ต์…˜

  • ํ•ด๋‹น TypeScript ํ”„๋กœ์ ํŠธ ๋‚ด ์ฝ”๋“œ๋“ค์ด ์–ด๋–ค JavaScript ๋ฒ„์ „์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ง€ ์ •ํ•˜๋Š” ์˜ต์…˜
    es5 ๋กœ ์„ค์ •ํ•˜๋ฉด CommonJS ๋ฒ„์ „์œผ๋กœ ์ปดํŒŒ์ผ
    es2016(=es7) ๋กœ ์„ค์ •ํ•˜๋ฉด ES2016 ๋ฒ„์ „์œผ๋กœ ์ปดํŒŒ์ผ
    • ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ณดํ†ต ES2016์„ ์ง€์›
      ๋ ˆ๊ฑฐ์‹œํ•œ ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ -> es5
      ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด es2016

compilerOptions - module ์˜ต์…˜

  • TypeScript ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•œ ํ›„ ์ƒ์„ฑ๋˜๋Š” JavaScript ๋ชจ๋“ˆ์˜ ํ˜•์‹์„ ์ง€์ •
  • ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๊ณ  ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•˜๋Š” ์˜ต์…˜
  • target ์˜ต์…˜๊ณผ๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์ธ ๊ด€๊ณ„

compilerOptions - outDir ์˜ต์…˜

  • ์ปดํŒŒ์ผ๋œ JavaScript ํŒŒ์ผ์ด ์ €์žฅ๋  ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •
  • ์˜ˆ๋ฅผ ๋“ค์–ด, "outDir": "dist"๋กœ ์„ค์ •ํ•˜๋ฉด ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ๋“ค์ด dist ํด๋”์— ์ €์žฅ

compilerOptions - sourceMap ์˜ต์…˜

  • ์ปดํŒŒ์ผ๋œ JavaScript ํŒŒ์ผ์— ๋Œ€ํ•œ ์†Œ์Šค ๋งต์„ ์ƒ์„ฑํ•˜๋Š” ์˜ต์…˜
  • ์†Œ์Šค ๋งต์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹คํ–‰ ์ค‘์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์›๋ž˜ ts ์†Œ์Šค ์ฝ”๋“œ์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ
  • ์ฝ”๋“œ ๋””๋ฒ„๊น…์— ํฐ ๋„์›€์ด ๋˜๊ธฐ์— ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๊ผญ true๋กœ ์„ค์ •
    • ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์šฉ๋Ÿ‰, ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋‚˜์„ ์ˆ˜๋„ ์žˆ์Œ

include, exclude ์˜ต์…˜

  • tsc๊ฐ€ ์ปดํŒŒ์ผ์„ ํ•  ๋•Œ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ์ œ์™ธํ•  ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜
profile
๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์–ด~~~

0๊ฐœ์˜ ๋Œ“๊ธ€