[TIL]2023.07.26 Type Script ์ ์‘๊ธฐ ๐Ÿ˜ŽTS ์…‹ํŒ… (๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์ถ•)

Nickยท2023๋…„ 7์›” 26์ผ
0

TIL: ์˜ค๋Š˜์„ ๋Œ์•„๋ณด์ž

๋ชฉ๋ก ๋ณด๊ธฐ
54/95
post-thumbnail
post-custom-banner

ํƒ€์••์Šคํฌ๋ฆฝํŠธ ๊ณต๋ถ€, ์•„์ง ์ ์‘ ์ค‘์ด๋ผ ๋จธ๋ฆฌ๊ฐ€ ๋ฐ›์•„๋“œ๋ฆฌ์ง€ ์•Š์Œ์œผ๋กœ, ๋ณต์Šต๊ณผ ์‹ค์Šต์ด ํ•„์š”ํ•œ ์‹œ์ ์—
๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ TS ์…‹ํŒ…์— ๋Œ€ํ•ด ๊ธฐ๋กํ•œ๋‹ค!
์ฐธ๊ณ ๋กœ ๋‚œ MacOS!

TS ์…‹ํŒ…

์ผ๋‹จ Node.js ์„ค์น˜๊ฐ€ ๋˜์–ด์žˆ๋Š” ์ „์ œํ•˜์— ๋‹ค์Œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์ถ•์— ๋Œ€ํ•ด ๋‚จ๊ธด๋‹ค!

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์น˜

ํ„ฐ๋ฏธ๋„์— npm i typescript -g ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰

  • ๋ช…๋ น์–ด ์‹คํ–‰์ด ๋๋‚˜๋ฉด ํ„ฐ๋ฏธ๋„์— tsc ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด -> ๋ช…๋ น์–ด๊ฐ€ ์ œ๋Œ€๋กœ ์‹คํ–‰์ด ๋˜๋ฉด TypeScript๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์น˜๊ฐ€ ๋œ ๊ฒƒ!

tsc (ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ)

  • ์ฃผ์š” ๋ช…๋ น์–ด
    • tsc โ€”-init
      • tsconfig.json์ด ์ƒ์„ฑ๋˜๋Š” ๋ช…๋ น์–ด
    • tsc index.ts
      • index.ts๋ฅผ ์ปดํŒŒ์ผ ํ•œ๋‹ค!
    • tsc src/*.ts
      • src ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  TypeScript ํŒŒ์ผ์„ ์ปดํŒŒ์ผ
    • tsc index.js --declaration --emitDeclarationOnly
      • @types ํŒจํ‚ค์ง€๋ฅผ ์œ„ํ•œ.d.ts ํŒŒ์ผ ์ƒ์„ฑ์„ ํ•˜๋Š” ๋ช…๋ น
      • TypeScript๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋“ˆ์ด ์•„๋‹ˆ๋ผ JavaScript๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋“ˆ์— ํƒ€์ž… ์„ ์–ธ์„ ์ œ๊ณตํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ž„!

tsconfig.json

tsc --init ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ -> tsconfig.json

  • TypeScript ํ”„๋กœ์ ํŠธ์˜ ์„ค์ • ํŒŒ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ!
  • ์ฃผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ์ปดํŒŒ์ผ ์˜ต์…˜ ๋ฐ ์ž…๋ ฅ ํŒŒ์ผ๋“ค์„ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ!

tsconfig.json ์ฃผ์š” ์˜ต์…˜

compilerOptions - target ์˜ต์…˜

  • TypeScript ํ”„๋กœ์ ํŠธ ๋‚ด ์ฝ”๋“œ๋“ค์ด ์–ด๋–ค JavaScript ๋ฒ„์ „์œผ๋กœ ๋ณ€ํ™˜์„ ํ•  ์ง€ ์ •ํ•˜๋Š” ์˜ต์…˜
    es5 ๋กœ ์„ค์ •ํ•˜๋ฉด CommonJS ๋ฒ„์ „์œผ๋กœ ์ปดํŒŒ์ผ๋˜๊ณ 
    es2016(=es7) ๋กœ ์„ค์ •ํ•˜๋ฉด ES2016 ๋ฒ„์ „์œผ๋กœ ์ปดํŒŒ์ผ์ด ๋จ!
  • TypeScript๊ฐ€ ์–ด๋Š ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰์ด ๋˜์–ด์•ผํ•˜๋Š”์ง€๋ฅผ ๊ณ ๋ คํ•ด์•ผ ๋จ!
    • ๋งŒ์•ฝ, ๋‚ด๊ฐ€ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๋ ˆ๊ฑฐ์‹œํ•œ ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•ด์•ผ ๋œ๋‹ค๋ฉด? โ†’ es5
    • ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด โ†’ es2016

compilerOptions - module ์˜ต์…˜

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

compilerOptions - outDir ์˜ต์…˜

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

compilerOptions - strict

  • ์—„๊ฒฉํ•œ ํƒ€์ž… ๊ฒ€์‚ฌ ์˜ต์…˜์„ ๋ชจ๋‘ ํ™œ์„ฑํ™”ํ•˜๋Š” ์˜ต์…˜
  • TypeScript ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ณด๋‹ค ์—„๊ฒฉํ•œ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด ์ฝ”๋“œ์˜ ์‹ค์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์Œ
  • ํ•ด๋‹น ์˜ต์…˜์„ true๋กœ ์„ค์ •ํ•˜๋ฉด ์•„๋ž˜์˜ ์˜ต์…˜๋“ค์ด ์ž๋™์œผ๋กœ true๋กœ ์„ค์ •
    : strictNullChecks
    -> ์ž ์žฌ์ ์œผ๋กœ null(undefined)์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค์— ๋Œ€ํ•ด์„œ ์—„๊ฒฉํ•˜๊ฒŒ ํ™•์ธํ•˜๋Š” ์˜ต์…˜!
    : strictFunctionTypes
    : strictBindCallApply
    : strictPropertyInitialization
    : noImplicitAny
    -> ํ•จ์ˆ˜์˜ ์ธ์ž ๋˜๋Š” ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ anyํƒ€์ž…์„ ๋ถ€์—ฌํ•˜์ง€ ์•Š๋„๋ก ํ•จ, ์ด ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ˆ„๋ฝ๋œ ํƒ€์ž… ์„ ์–ธ์„ ํ™•์ธํ•˜๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค!
    : noImplicitThis
    ; alwaysStrict

compilerOptions - sourceMap ์˜ต์…˜

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

include , exclude ์˜ต์…˜

  • tsc๊ฐ€ ์ปดํŒŒ์ผ์„ ํ•  ๋•Œ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ์ œ์™ธํ•  ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜
    • โ€œinclude": ["src/*/"]
      • src ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ‘์˜ ์นœ๊ตฌ๋“ค์„ ์ปดํŒŒ์ผ ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ!
    • "exclude": ["node_modules", "dist"]
      • node_modules, dist ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ‘์˜ ์นœ๊ตฌ๋“ค์€ ์ปดํŒŒ์ผ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ!

d.ts ํŒŒ์ผ

  • .d.ts ํŒŒ์ผ์€ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ TypeScript ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค!
  • ์ด๋ฏธ ์ž‘์„ฑ๋œ ๋‹ค์–‘ํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ–ˆ๋‹ค!
  • TypeScript๋Š” @types ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ํƒ€์ž… ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค!

๊ทธ๋ž˜์„œ d.ts๋Š” ๋ญ์•ผ?

.d.ts ํŒŒ์ผ์€ TypeScript ํƒ€์ž… ์ •์˜ ํŒŒ์ผ์ด๋‹ค. ์ฆ‰, JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ํƒ€์ž… ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค!

  • .d.ts ํŒŒ์ผ๋กœ TypeScript ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‹ค์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค
    • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•จ์ˆ˜ ํƒ€์ž… ์ •๋ณด
    • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํด๋ž˜์Šค ํƒ€์ž… ์ •๋ณด
    • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ์ฒด ํƒ€์ž… ์ •๋ณด
  • ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, .d.ts ํŒŒ์ผ๋กœ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํƒ€์ž… ์ถ”๋ก ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    -> ํƒ€์ž… ์ถ”๋ก ์ด๋ž€ ํƒ€์ž…์ด ๋ช…์‹œ๊ฐ€ ๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ์•„์„œ ํ•ด๋‹น ํƒ€์ž…์— ๋Œ€ํ•ด ์ถ”๋ก ์„ ํ•˜๋Š” ๊ฒƒ

    JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ TypeScript์—์„œ ์“ฐ๋ ค๋ฉด ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ .d.ts ํŒŒ์ผ๋งŒ ์ œ๊ณต์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค!
    TypeScript ํ”„๋กœ์ ํŠธ์—์„œ๋„ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•œ ์ค„๋„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์“ธ ์ˆ˜ ์žˆ์Œ!

profile
๋ฐฐ์šฐ๊ณ  ๋„์ „ํ•˜๋Š”๊ฒƒ์„ ๋ฉˆ์ถ”์ง€ ์•Š๋Š” ๊ฐœ๋ฐœ์ž ์ž…๋‹ˆ๋‹ค.
post-custom-banner

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