Typescript Basics & Basic Types

Teasanยท2022๋…„ 9์›” 13์ผ
0

typescript

๋ชฉ๋ก ๋ณด๊ธฐ
12/13
post-thumbnail

๋ชฉ์ฐจ

  • Understanding TypeScript Core Libs
  • More Configuration & Compilation Options
  • Working with Source Maps

โœง TypeScript ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ดํ•ดํ•˜๊ธฐ

{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    // "lib": [],
    ...
  }
}
  • lib ์€ dom์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•ญ๋ชฉ๋“ค, ์ฆ‰ ๊ธฐ๋ณธ ๊ฐ์ฒด/๊ธฐ๋Šฅ/ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋…ธ๋“œ๋ฅผ ์ง€์ •ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์˜ต์…˜์ด๋‹ค.
<button>Click me</button>
  • ๋จผ์ € index.html์— <button> ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค๊ณ  app.ts๋กœ ์ด๋™ํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด์ค€๋‹ค.
const button = document.querySelector("button");

button.addEventListener();
  • button์— addEventListenr()๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ button์„ ์ฐพ์•„๋‚ธ ๊ฒŒ ๋งž๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
const button = document.querySelector("button")!;

button.addEventListener("click", () => {
  console.log("Clicked");
});
  • ์ง€๊ธˆ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ผ์ธ์˜ ๋์— ๋Š๋‚Œํ‘œ๋ฅผ ๋ถ™์—ฌ ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•ด์ค€๋‹ค.

    โœ๐Ÿป ๋Š๋‚Œํ‘œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ button์ด ์กด์žฌํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ๊ฐ’์ด ๋ฐ˜ํ™˜๋  ๊ฒƒ๋ผ๊ณ  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์— ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  tsc ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ์ด ์ˆ˜ํ–‰๋œ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์™œ ํ•ด๋‹น document๊ฐ€ unknown ์ด๋ผ๋Š” ์—๋Ÿฌ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” ๊ฑธ๊นŒ? ์ด์™€ ๊ฐ™์€ document์™€ const, ๋ณ€์ˆ˜ ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์•„๋Š” ๊ฑธ๊นŒ? ์„ค๋ น document๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค ํ•˜๋”๋ผ๋„ querySelector ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•œ๋‹ค๋Š” ๊ฒƒ, button์ด addEventListener๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋˜ ์–ด๋–ป๊ฒŒ ์•Œ๊ณ  ์žˆ๋Š” ๊ฑธ๊นŒ? ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค ์•„๋Š” ๊ฑธ๊นŒ?
{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    // "lib": [],
    ...
  }
}
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์•Œ๊ณ  ์ž‘๋™์‹œํ‚ค๋Š” ์ด์œ ๋Š” ๋ฐ”๋กœ lib ์˜ต์…˜ ๋•Œ๋ฌธ์ด๋‹ค..

compilerOptions์˜ lib ์˜ต์…˜

{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    // "lib": [],
    ...
  }
}
  • ๋ณด๋‹ค์‹œํ”ผ ์ง€๊ธˆ์€ ์ฃผ์„์ฒ˜๋ฆฌ๋˜์–ด ์žˆ์ง€๋งŒ, ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์ผ๋ถ€ ๊ธฐ๋ณธ ์„ค์ •์ด ์ ์šฉ๋œ๋‹ค. lib ์„ค์ •์ด ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ์„ค์ •์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ target์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. es6๋กœ ์„ค์ •ํ•œ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ es6์—์„œ ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ๋‹ค. ์ฆ‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ es6์˜ ๊ธฐ๋Šฅ๋“ค์„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค๋Š” ๋œป์ด๋‹ค. ์ด๋Š” ๋˜ํ•œ ๋ชจ๋“  DOM API๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด, lib ์˜ต์…˜์ด ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ผ๋ถ€ ๊ธฐ๋ณธ ์˜ต์…˜์ด ์ ์šฉ๋˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ ์˜ต์…˜์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์‚ฌํ•ญ๋“ค์ด๋ฏ€๋กœ DOM API ๋“ฑ์ด ํฌํ•จ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    "lib": []
    ...
  }
}
  • ์ฃผ์„ ์ฒ˜๋ฆฌ๋œ lib์˜ ์ฃผ์„์„ ํ•ด์ œํ•˜๊ณ  ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ฃผ์„ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋ฉด ๊ธฐ๋ณธ ์„ค์ •์ด ๋”์ด์ƒ ์ ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋Œ€์‹  lib์œผ๋กœ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์ฆ‰ lib ๋ฐฐ์—ด์— ์‚ฌ์šฉํ•  ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ํƒ€์ž… ์ •์˜๋“ค ๋ง์ด๋‹ค. (๋‹ค์‹œ ์ฃผ์„์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉด, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ธฐ๋ณธ ์„ค์ •์„ ์ ์šฉํ•˜์—ฌ ์ž‘๋™ํ•œ๋‹ค.)
{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    "lib": [
      "DOM"
    ]
    ...
  }
}
  • ๋”ฐ๋ผ์„œ ์ ํ•ฉํ•œ ๊ฐ’์„ lib์— ์„ค์ •ํ•ด๋‘๋„๋ก ํ•œ๋‹ค. DOM์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  DOM API๋ฅผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    "lib": [
      "DOM",
      "ES6",
      "DOM.Iterable",
      "ScriptHost"
    ]
    ...
  }
}
  • ํ˜„์žฌ ES6 ์„ธ๋Œ€์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ES6 ์˜ต์…˜๋“ค์„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ES6๋„ ์ถ”๊ฐ€ํ•œ๋‹ค. DOM.Iterable ์™€ ScriptHost ๋„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ด ๋‘๊ฐ€์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž‘์—…์— ์‚ฌ์šฉํ•  ๋งŒํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ๋„ค๊ฐ€์ง€ ์˜ต์…˜ ๊ฐ’์€ ์ •ํ™•ํ•˜๊ฒŒ ES6๋กœ ์„ค์ •ํ–ˆ์„ ๋•Œ์˜ ์ž๋™ ๊ธฐ๋ณธ ์„ค์ •๊ณผ ๊ฐ™๋‹ค.
{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    // "lib": [
    //   "DOM",
    //   "ES6",
    //   "DOM.Iterable",
    //   "ScriptHost"
    // ]
    ...
  }
}
  • ์ฆ‰, ์ฃผ์„์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋„ ์ด๋Š” ๊ทธ๋ƒฅ ES6์˜ ๊ธฐ๋ณธ๊ฐ’์ด ์ž๋™์œผ๋กœ ์„ค์ •๋˜๋Š” ๊ธฐ๋ณธ ์„ค์ •๊ณผ ๋™์ผํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

โœง ์ถ”๊ฐ€ ๊ตฌ์„ฑ ๋ฐ ์ปดํŒŒ์ผ ์˜ต์…˜

{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    "lib": [
      "DOM",
      "ES6",
      "DOM.Iterable",
      "ScriptHost"
    ]
    /* Specify library files to be included in the compilation. */,

    // "allowJs": true, /* Allow javascript files to be compiled. */
    // "checkJs": true,  /* Report errors in .js files. */
    ...
  }
}
  • allowJs ์—ญ์‹œ ํฅ๋ฏธ๋กœ์šด ์˜ต์…˜์ด๋‹ค. allowJs๋Š” ์ปดํŒŒ์ผ์‹œ์— checkJS ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์— ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. allowJs ์˜ต์…˜์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. allowJs๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํŒŒ์ผ์ด .ts๋กœ ๋๋‚˜์ง€ ์•Š๋”๋ผ๋„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค. checkJS ์˜ต์…˜์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋”๋ผ๋„, ๊ตฌ๋ฌธ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์ž ์žฌ์  ์—๋Ÿฌ๋ฅผ '๋ณด๊ณ 'ํ•ด์ฃผ๊ณ , ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ผ๋ถ€ ๊ธฐ๋Šฅ์˜ ์žฅ์ ์„ ์ทจํ•˜๊ณ ์ž ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” any ํƒ€์ž…๋งŒ ํ—ˆ์šฉํ•˜๋Š”๋ฐ ์ด ์˜ต์…˜๋“ค(checkJS, allowJs)๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๊ทธ์™€ ๊ฐ™์ด ์„ค์ •๋œ๋‹ค.
{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    "lib": [
      "DOM",
      "ES6",
      "DOM.Iterable",
      "ScriptHost"
    ]
    /* Specify library files to be included in the compilation. */,

    // "allowJs": true, /* Allow javascript files to be compiled. */
    // "checkJs": true,  /* Report errors in .js files. */
    ...
  }
}
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์ ํŠธ๋‚˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๊ณผ ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋„ ํ•จ๊ป˜ ๊ฒ€์‚ฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    "lib": [
      "DOM",
      "ES6",
      "DOM.Iterable",
      "ScriptHost"
    ]
    /* Specify library files to be included in the compilation. */,

    // "allowJs": true, /* Allow javascript files to be compiled. */
    // "checkJs": true,  /* Report errors in .js files. */
    // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true, /* Generates corresponding '.d.ts' file. */
    // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
    ...
  }
}
  • ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์€ declaration์™€ declarationMap๋Š” ์ฃผ์„์ฒ˜๋ฆฌ ํ•ด์ค€๋‹ค.d.ts ํŒŒ์ผ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฐฐํฌํ•  ๋•Œ ์ค‘์š”ํ•œ ๊ณ ๊ธ‰ ๊ฐœ๋…์ด๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ํƒ€์ž…์„ ์„ค๋ช…ํ•˜๋Š” manifest ํŒŒ์ผ์ด ํ•„์š”ํ•œ๋ฐ ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ .d.ts์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

โœง ์†Œ์Šค ๋งต ์ž‘์—…ํ•˜๊ธฐ

{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    "lib": [
      "DOM",
      "ES6",
      "DOM.Iterable",
      "ScriptHost"
    ]
    /* Specify library files to be included in the compilation. */,

    // "allowJs": true, /* Allow javascript files to be compiled. */
    // "checkJs": true,  /* Report errors in .js files. */
    // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true, /* Generates corresponding '.d.ts' file. */
    // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
    // "sourceMap": true, /* Generates corresponding '.map' file. */
    ...
  }
}
  • sourceMap๋Š” ๋””๋ฒ„๊น… ์ž‘์—…๊ณผ ๊ฐœ๋ฐœ์— ์œ ์šฉํ•œ ์˜ต์…˜์ด๋‹ค. ๋งŒ์•ฝ ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  tsc๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋“  ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฐ๋ธŒ ์„œ๋ฒ„๋ฅผ ์—ด์–ด์„œ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ Sources ํƒญ์œผ๋กœ ์ด๋™ํ•ด๋ณด์ž.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-08-01 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 7 34 23

  • ์†Œ์Šค๋งต ํƒญ์„ ํ™•์ธํ•ด๋ณด๋ฉด ํฌํ•จ๋œ ๋‚ด์šฉ์ด ๊ฒฐ๊ตญ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ผ๋Š” ๊ฑธ ์•Œ์ˆ˜ ์žˆ๋‹ค. ํ˜„์žฌ๋Š” ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ์ด์ง€๋งŒ ๋งŒ์•ฝ ๋ณต์žกํ•œ ๋ฐฉ์‹์˜ ์ฝ”๋“œ๊ฐ€ ์žˆ์–ด์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์™€ ๋””์ปดํŒŒ์ผ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋””๋ฒ„๊น… ํ•ด์•ผํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ์•„๋‹Œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ด๋‹ค.
{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6"
    "module": "commonjs"
    "lib": [
      "DOM",
      "ES6",
      "DOM.Iterable",
      "ScriptHost"
    ]
    /* Specify library files to be included in the compilation. */,

    // "allowJs": true, /* Allow javascript files to be compiled. */
    // "checkJs": true,  /* Report errors in .js files. */
    // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true, /* Generates corresponding '.d.ts' file. */
    // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
    "sourceMap": true, /* Generates corresponding '.map' file. */
    ...
  }
}
  • sourceMap ์˜ต์…˜์˜ ์ฃผ์„์„ ํ’€๊ณ , ๊ฐ’์„ ์ฐธtrue๋กœ ์„ค์ •ํ•œ ๋’ค tsc ๋ช…๋ น์–ด๋กœ ์ „์ฒด ํŒŒ์ผ์„ ์ปดํŒŒ์ผ ํ•ด์ฃผ๋ฉด,

image

  • ํด๋” ๋‚ด๋ถ€์— js.map ํŒŒ์ผ๋“ค์ด ์ƒ์„ฑ๋œ๋‹ค. ํŒŒ์ผ๋“ค์„ ์‚ดํŽด๋ณด๋ฉด, ์ดํ•ดํ•  ์ˆ˜ ์—†๋Š” ๋‚ด์šฉ๋“ค์ด ๋“ค์–ด์žˆ์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ํŒŒ์ผ์€ ์ž…๋ ฅ ํŒŒ์ผ์— ์ž๋ฐ”์Šผ๋ฆกํŠธ ํŒŒ์ผ์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์™€ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ๊ฐ„์˜ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•œ๋‹ค๋Š” ๊ฑธ ๊ธฐ์–ตํ•˜์ž. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์—ด๊ณ  ์†Œ์Šคํƒญ์œผ๋กœ ์ด๋™ํ•ด๋ณด๋ฉด,

image

  • ์†Œ์Šค ํƒญ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์— ์ค‘๋‹จ์ ์„ ๋‘˜ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๊ธฐ๋Šฅ๋“ค์€ ๋””๋ฒ„๊น… ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•œ ๋‹จ๊ณ„ ํ–ฅ์ƒ์‹œ์ผœ์ค„ ๊ฒƒ์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋Œ€์‹  ๊ธฐ๋ณธ์ ์œผ๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์—์„œ ์ง์ ‘ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌผ๋ก  ์ง€๊ธˆ์ฒ˜๋Ÿผ ์•„์ฃผ ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋กœ ์ž‘์—…์„ ํ•  ๋•Œ์—๋Š” ๊ตณ์ด ์ด ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•  ํ•„์š”๋Š” ์—†์„ ๊ฒƒ์ด๋‹ค. ๋‹ค๋งŒ ์ด sourceMap ์˜ต์…˜์˜ ๊ธฐ๋Šฅ์€ ๋””๋ฒ„๊น…์„ ๋‹จ์ˆœํ™”ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ์•„์ฃผ ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋ง์ž.

โœฆ ์ถœ์ฒ˜


๐Ÿšจ ํ•ด๋‹น ํฌ์ŠคํŒ…์€ Udemy์˜ Typescript :๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค์ „ํ˜• ํ”„๋กœ์ ํŠธ๊นŒ์ง€ with React + NodeJS ๊ฐ•์˜๋ฅผ ๋ฒ ์ด์Šค๋กœ ํ•œ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค.
โœ๐Ÿป ๊ฐ•์˜ git repo ๋ฐ”๋กœ๊ฐ€๊ธฐ

profile
์ผ๋‹จ ๊ณต๋ถ€๊ฐ€ '์ ์„ฑ'์— ๋งž๋Š” ๊ฐœ๋ฐœ์ž. ๊ทผ์„ฑ์žˆ์Šต๋‹ˆ๋‹ค.

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