TypeScript

TypeScript ์„ค์น˜ํ•˜๊ธฐ๐ŸŒŠ

yunieyunie 2022. 12. 3. 21:20

๐ŸŒŠ TypeScript

TypeScript๋Š” type์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™•์žฅํ•œ ๊ฒƒ์œผ๋กœ ์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์Šˆํผ์…‹์ธ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „ ์‚ฌ์ „์— ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๊ณ  ์ฝ”๋“œ ์ž๋™์™„์„ฑ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š”๋ฐ ๋“ค์ด๋Š” ์‹œ๊ฐ„์„ ์ค„์—ฌ์ค€๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์˜ ํ’ˆ์งˆ๊ณผ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋‹ฌ๋ฆฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํŒŒ์ผ์„ ํ•œ๋ฒˆ ๋ณ€ํ™˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
์ด ๋ณ€ํ™˜ ๊ณผ์ •์„ ์ปดํŒŒ์ผ(complile)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.


๐Ÿ’ง TypeScript ์„ค์น˜ํ•˜๊ธฐ

๋จผ์ € broswer(ex. chrome), node.js, nvm๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

1. ํ„ฐ๋ฏธ๋„์— npm init -y ์ž…๋ ฅ

ํด๋” ์ƒ์„ฑ ํ›„ vscode ํ„ฐ๋ฏธ๋„์— npm init์„ ์ž…๋ ฅํ•ด npm ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ž.

2. ํ„ฐ๋ฏธ๋„์— npm i typescript -g ์ž…๋ ฅ

-g๋Š” ์ปดํ“จํ„ฐ ์ „์—ญ์— typescript๋ฅผ ์„ค์น˜ํ•œ๋‹ค๋Š” ๋œป์ด๋ฉฐ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ๋งŒ ์‹คํ–‰ํ•˜๋ ค๋ฉด -g๋ฅผ ๋นผ๋ฉด ๋œ๋‹ค.

3. ํ„ฐ๋ฏธ๋„์— npm i -D ts-node ์ž…๋ ฅ

node์—์„œ ts๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ts-node๋ฅผ ์„ค์น˜ํ•˜์ž.

4. package.json ํŒŒ์ผ์˜ scripts ์ˆ˜์ •

"scripts":
      "build": "tsc --build",
        "clean": "tsc --build --clean"
    }

ts๋ฅผ ์ปดํŒŒ์ผํ•˜๋ ค๋ฉด npm run build
buildํ•œ ํŒŒ์ผ์„ ๋ชจ๋‘ ์ง€์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด npm run clean

5. tsconfig.json ํŒŒ์ผ ์ƒ์„ฑ

tsconfig.json ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 

์ฒซ ๋ฒˆ์งธ, ํ„ฐ๋ฏธ๋„์— npx tsc --init ๋ฅผ ์ž…๋ ฅํ•˜์ž.

๊ทธ๋Ÿผ ์ž๋™์œผ๋กœ tsconfig.json ํŒŒ์ผ์ด ๋ฃจํŠธ๊ฒฝ๋กœ์— ์ƒ์„ฑ๋˜๋ฉฐ ๊ธฐ๋ณธ์ ์ธ compilerOptions์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.

 

๋‘ ๋ฒˆ์งธ, ๋ฃจํŠธ๊ฒฝ๋กœ์— ์ง์ ‘ tsconfig.json ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์•„๋ž˜์˜ ๊ธฐ๋ณธ์ ์ธ compilerOptions๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ๋œ๋‹ค.

{
      "compilerOptions": {
          "strict": true,
          "module": "commonjs",
          "moduleResolution": "node",
          "target": "es5",
          "outDir": "./dist",
          "lib": ["es5", "es6", "es7","esnext", "DOM"],
          "esModuleInterop": true
      },
      "exclude": ["node_modules"],
      "include": ["index.ts"]
  }
  • strict : ์—„๊ฒฉํ•˜๊ฒŒ ํƒ€์ž… ๊ฒ€์‚ฌ
  • module : ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ ์‹œ amd, Node์—์„œ ๋™์ž‘ ์‹œ commonjs
  • moduleResolution : module ํ‚ค์˜ ๊ฐ’์ด commonjs๋ฉด node๋กœ ์„ค์ •ํ•˜๊ณ  amd์ด๋ฉด classic์œผ๋กœ ์„ค์ •
  • target : ๋Œ€๋ถ€๋ถ„ ES5๋กœ ์„ค์ •ํ•˜๋ฉฐ ํ•ด๋‹น ๋ฒ„์ „์œผ๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผ
  • outDir : ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ๋ ๋•Œ ์ €์žฅ๋˜๋Š” ํด๋”์˜ url
  • lib : ์‚ฌ์šฉํ•  JS ๋ฒ„์ „
  • esModuleInterop : true๋กœ ์„ค์ • ํ•ด๋†“์œผ๋ฉด export default๊ฐ€ ์—†๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ * as ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด import * as React from 'react; ์ด๋Ÿฐ ๋ฐฉ์‹์—์„œ import React from 'react; ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • include๊ณผ exclude : include๋Š” ์ปดํŒŒ์ผ ๋Œ€์ƒ, exclude๋Š” ์ปดํŒŒ์ผ์— ์ œ์™ธ๋˜๋Š” ๋Œ€์ƒ์ด๋ฉฐ src/*/.ts๋Š” src ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ๊ทธ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ ์ปดํŒŒ์ผ ๋Œ€์ƒ์œผ๋กœ ํฌํ•จํ•œ๋‹ค๋Š” ์˜๋ฏธ

์„ธ๋ถ€์˜ต์…˜๋“ค์€ ํ•„์š”์— ๋”ฐ๋ผ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.
์—ฌ๊ธฐ์—์„œ (https://typescript-kr.github.io/pages/compiler-options.html) ๋‹ค์–‘ํ•œ compilerOptions์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

6. ๋ฃจํŠธ๊ฒฝ๋กœ์— ์ž„์˜์˜ index.ts ์ƒ์„ฑ ํ›„ ํ„ฐ๋ฏธ๋„์— npm run build ์ž…๋ ฅ

ํ…Œ์ŠคํŠธ์šฉ tsํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  npm run build๋ฅผ ์ž…๋ ฅํ•˜๋ฉด dist ํด๋”์™€ ๊ทธ ์•ˆ์— jsํŒŒ์ผ์ด ์ปดํŒŒ์ผ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.