Home ๐ŸŒ€ 3/7 TS - ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•˜๊ธฐ (1)
Post
Cancel

๐ŸŒ€ 3/7 TS - ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•˜๊ธฐ (1)

JS ์ฝ”๋“œ์— TS๋ฅผ ์ ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 

  • ๊ธฐ๋Šฅ์ ์ธ ๋ณ€๊ฒฝ์€ ์ ˆ๋Œ€ X
  • ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ๋‚ฎ์„ ๋• ํ•จ๋ถ€๋กœ ts ์ ์šฉํ•˜์ง€ ๋ง ๊ฒƒ
  • ์ ์ง„์ ์œผ๋กœ strict ๋ ˆ๋ฒจ์„ ์ฆ๊ฐ€์‹œํ‚ฌ ๊ฒƒ (์ฒ˜์Œ๋ถ€ํ„ฐ ์—„๊ฒฉํ•˜๊ฒŒ ํƒ€์ž… ์ ์šฉ x)

TS๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

( 0. ์ˆœ์ˆ˜ JS : JSDoc์„ ์ด์šฉํ•ด ์ˆœ์ˆ˜ JS ์ฝ”๋“œ์— ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ )

  1. ts ํ™˜๊ฒฝ ์„ค์ • ๋ฐ .ts ํŒŒ์ผ๋กœ ๋ณ€ํ™˜
  2. any ํƒ€์ž… ์„ ์–ธ
  3. any ํƒ€์ž…์„ ๋” ์ ์ ˆํ•œ ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ

1. typescript ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

  • ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ npm init -y ๋กœ package.json ์ƒ์„ฑ
  • npm i typescript -D ๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ์„ฑ
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ •ํŒŒ์ผ tsconfig.json์„ ์ƒ์„ฑํ•˜๊ณ  ๊ธฐ๋ณธ๊ฐ’ ์ถ”๊ฐ€ํ•˜๊ธฐ
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    {
      "compilerOptions": {
        "allowJs": true,
        "target": "ES5",
        "outDir": "./dist",
        "moduleResolution": "Node",
        "lib": ["ES2015", "DOM", "DOM.Iterable"]
      },
      "include": ["./src/**/*"],
      "exclude": ["node_modules", "dist"]
    }
    
  • ์„œ๋น„์Šค ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ .js โ†’ .ts ๋กœ ๋ณ€ํ™˜ (app.js โ†’ app.ts)
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ ๋ช…๋ ์–ด tsc ๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

2. ์—„๊ฒฉํ•˜์ง€ ์•Š์€ ํƒ€์ž… ํ™˜๊ฒฝ(loose type)์—์„œ ํ”„๋กœ์ ํŠธ ๋Œ๋ ค๋ณด๊ธฐ

  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ํ†ต๊ณผํ•˜๋Š”์ง€ ๋จผ์ € ํ™•์ธ
  • ๋ชจ๋“  js ํŒŒ์ผ โ†’ ts ํŒŒ์ผ
  • ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋‚˜๋Š” ๊ฒƒ๋“ค ์œ„์ฃผ๋กœ๋งŒ ์—๋Ÿฌ ์žก๊ธฐ (์—ฌ๊ธฐ์„œ ๊ธฐ๋Šฅ์„ ์‚ฌ์†Œํ•˜๊ฒŒ๋ผ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜)
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์„ฑ๊ณตํ•˜๋Š”์ง€ ํ™•์ธ

3. ๋ช…์‹œ์ ์ธ any ์„ ์–ธํ•˜๊ธฐ

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ •ํŒŒ์ผ์— noImplicitAny: true ์ถ”๊ฐ€ํ•˜๊ธฐ
  • ๊ฐ€๋Šฅํ•œ ํƒ€์ž…์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ณณ์— ํƒ€์ž…์„ ์ ์šฉํ•˜๊ธฐ
    • library๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ DefinitelyTyped์—์„œ @types ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„ ์„ค์น˜ํ•œ๋‹ค.
  • ํƒ€์ž…์„ ์ •ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ณณ์ด ์žˆ์œผ๋ฉด ๋ช…์‹œ์ ์œผ๋กœ๋ผ๋„ any ์„ ์–ธํ•˜๊ธฐ

4. strict ๋ชจ๋“œ ์„ค์ •ํ•˜๊ธฐ

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ • ํŒŒ์ผ์— ์•„๋ž˜ ์„ค์ •์„ ์ถ”๊ฐ€ํ•œ๋‹ค
1
2
3
4
5
6
7
8
9
{
  "strict": true,
  "strictNullChecks": true,
  "strictFunctionTypes": true,
  "strictBindCallApply": true,
  "strictPropertyInitialization": true,
  "noImplicitThis": true,
  "alwaysStrict": true,
}
  • any๋กœ ๋˜์–ด์žˆ๋Š” ํƒ€์ž…์„ ์ตœ๋Œ€ํ•œ ๋” ์ ์ ˆํ•œ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜
  • as ์™€ ๊ฐ™์€ ํ‚ค์›Œ๋“œ๋ฅผ ์ตœ๋Œ€ํ•œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ๊ณ ๋ฏผํ•ด์„œ ๋ณ€๊ฒฝํ•œ๋‹ค

Q.

  • ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ž‘์„ฑ

reference

This post is licensed under CC BY 4.0 by the author.

โ˜€๏ธ 3/6 - To check truthy value - if(var)

๐ŸŒ€ 3/7 TS - ์ ์ง„์ ์œผ๋กœ ์ ์šฉํ•˜๊ธฐ (2) - JSDoc์œผ๋กœ js์—์„œ type checkํ•˜๊ธฐ