Study_Develop/React

์ดˆ๊ธฐ ์„ธํŒ… / eslint, prettier / tsconfig.json / tsconfig ์ „์—ญ ์†์„ฑ

hiijihyun 2023. 8. 11. 15:43
๋ฐ˜์‘ํ˜•

 

์ดˆ๊ธฐ ์„ธํŒ… ์ดํ•ดํ•˜๋А๋ผ 

๋ช‡์‹œ๊ฐ„ ๊ฑธ๋ ธ๋‹ค..

ํ•˜์ง€๋งŒ.. ๋“ฃ๋Š”๋‹ค.. ๊ฐ•์˜๋ฅผ..

๊ทธ๋ฆฌ๊ณ  .. ๊ธฐ๋ก ํ•œ๋‹ค...

 

 

ํ”„๋ก ํŠธ์—”๋“œ ์ดˆ๊ธฐ ์„ธํŒ… - exlint, prettier

 

npm i -D prettier eslint-plugin-prettier eslint-config-prettier

 

exlint : ์ฝ”๋“œ ๊ฒ€์‚ฌ ๋„๊ตฌ
prettier : ์ฝ”๋“œ ์ •๋ ฌ ๋„๊ตฌ

 

 

.eslintrc >

{
  "extends": ["plugin:prettier/recommended"],
  "parserOptions": {
    "sourceType": "module",
    "ecmaVersion": 2021
  }
}

 

  "extends": ["plugin:prettier/recommended"],

: ํ”„๋ฆฌํ‹ฐ์–ด๊ฐ€ ์ถ”์ฒœํ•œ ๋Œ€๋กœ ๋”ฐ๋ฅด๊ฒ ๋‹ค๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

 

.prettierrc >

{
  "printWidth": 120,
  "tabWidth": 2,
  "singleQuote": true,
  "trailingComma": "all",
  "semi": true
}

 

์ตœ๋Œ€ ๊ธ€์ž์ˆ˜ 120

์ŠคํŽ˜์ด์Šค ๋‘์นธ

ํ™‘ ๋”ฐ์˜ดํ‘œ ์‚ฌ์šฉ

ํ•ญ์ƒ ์ฝค๋งˆ๋ฅผ ๋ถ™์ด๊ฒ ๋‹ค

์„ธ๋ฏธ์ฝœ๋ก ์„ ํ•ญ์ƒ ๋ถ™์ด๊ฒ ๋‹ค๋Š” ๋œป

 

tsconfig.json

 

tsconfig.json์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๋Š” ์ปดํŒŒ์ผ ์„ค์ •์„ ํ•œ๊บผ๋ฒˆ์— ์ •์˜ ํ•ด๋†“๋Š” ํŒŒ์ผ์ด๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ์ปดํŒŒ์ผ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฃจํŠธํŒŒ์ผ, ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ ๋“ฑ์„ ์ƒ์„ธํžˆ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋””๋ ‰ํ† ๋ฆฌ์— tsconfig.jsonํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ TypeScriptํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ๊ฐ€ ๋œ๋‹ค.

tsconfig.jsonํŒŒ์ผ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ปจํŒŒ์ผ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฃจํŠธ ํŒŒ์ผ๊ณผ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์„ ์ง€์ •ํ•œ๋‹ค.

 

JavaScript ํ”„๋กœ์ ํŠธ๋Š” jsconfig.json ํŒŒ์ผ์„ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ํŒŒ์ผ์€ tsconfig.json ํŒŒ์ผ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜์ง€๋งŒ,

๋ช‡๋ช‡ JavaScript ๊ด€๋ จ ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋ž˜๊ทธ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋‹ค.

 

tsconfig์—์„œ ์˜ต์…˜๋“ค์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ๋†“์œผ๋ฉด, ๋”์ด์ƒ ์ปดํŒŒ์ผ ํ•  ๋–„ ๋ช…๋ น์–ด์— ์ผ์ผํžˆ ๋Œ€์ƒ ํŒŒ์ผ์ด๋‚˜ 

์˜ต์…˜์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ tsc๋‚˜ ts-node๋ช…๋ น์–ด๋ฅผ ๊ทธ๋ƒฅ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด, ํ˜„์žฌ ํด๋”์— ์žˆ๋Š” tsconfig์„ค์ • ๋‚ด์šฉ์„ ๊ธฐ์ค€์œผ๋กœ 

ํ”„๋กœ์ ํŠธ์—์„œ ์†Œ์Šค๋“ค์„ ๋ณ€ํ™˜ ์ž‘์—…(์ปดํŒŒ์ผ)์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

๋งŒ์•ฝ ํ˜„์žฌ ํด๋”์— tsconfig์„ค์ • ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด ํ”„๋กœ์ ํŠธ ํด๋” ๋‚ด์—์„œ ์ƒ์œ„ ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฒ€์ƒ‰ํ•ด ๋‚˜๊ฐ„๋‹ค.

 

 

tsc --init

 

ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ์‹คํ–‰ํ•˜๋ฉด, ๋ฏธ๋ฆฌ ์ž‘์„ฑ๋œ tsconfig.jsonํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด ์‚ฌ์ง„์—์„œ ๋ณด๋‹ค์‹œํ”ผ ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ์˜ต์…˜๋“ค์ด ์žˆ๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

tsconfig ์ „์—ญ ์†์„ฑ

 

tsconfig์ „์—ญ ์†์„ฑ์ด๋ž€, ํŒŒ์ผ์˜ ์ตœ์ƒ์œ„์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๋Š” ์†์„ฑ๋“ค์„ ์ผ์ปซ๋Š”๋‹ค.

 

{
    // TypeScript ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์˜ต์…˜๋“ค์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ
    "compilerOptions": { 
        "target": "es5", 
        "module": "commonjs", 
        "strict": true, 
        "sourceMap": true
        // ... ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ์†์„ฑ๋“ค
    },

    // ์ปดํŒŒ์ผํ•  ํŒŒ์ผ๋“ค์˜ ๊ฐœ๋ณ„ ๋ชฉ๋ก์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ
    "files": ["src/main.ts", "src/utils.ts"],

    // ์ปดํŒŒ์ผํ•  ํŒŒ์ผ๋“ค์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ (์™€์ผ๋“œ ์นด๋“œ ํŒจํ„ด์œผ๋กœ ๋ฌถ์–ด ํ‘œํ˜„) 
    "include": [ "src/**/*.ts" ], 
    
    // ์ปดํŒŒ์ผ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•  ํŒŒ์ผ๋“ค์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ 
    "exclude": [ "node_modules", "**/*.test.ts" ], 
    
    // ๋‹ค๋ฅธ tsconfig.json ํŒŒ์ผ์„ ์ƒ์†๋ฐ›์•„์„œ ์„ค์ •์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์†์„ฑ 
    "extends": "./configs/base.json", 
    
    // ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ง€์ •ํ•˜๋Š” ์†์„ฑ 
    "references": [ 
        { "path": "./subproject1" }, 
        { "path": "./subproject2" } 
    ], 
    
    // ํƒ€์ž… ์Šต๋“(type acquisition)๊ณผ ๊ด€๋ จ๋œ ์˜ต์…˜๋“ค์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ 
    "typeAcquisition": { 
        "enable": true, 
        "include": ["jquery"], 
        "exclude": ["react"] 
    }, 
        
    // watch ๋ชจ๋“œ์™€ ๊ด€๋ จ๋œ ์˜ต์…˜๋“ค์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ 
    "watchOptions": { 
        "watchFile": "useFsEvents", 
        "watchDirectory": "useFsEvents", 
        "fallbackPolling": "dynamicPriority"
    }
}

 

๋งŽ์€ ์ „์—ญ ์†์„ฑ๋“ค์ด ์žˆ์ง€๋งŒ, ์ด ์ค‘์—์„œ ์ฃผ๋กœ ์“ฐ์ด๋Š” ๋‹ค์„ฏ๊ฐ€์ง€ ์†์„ฑ์œผ๋กœ๋Š”

compilerOptions, files, include, exclude, extends ์ •๋„๊ฐ€ ์žˆ๋‹ค.

 

files

 

ํ”„๋กœ์ ํŠธ์—์„œ ์ปดํŒŒ์ผํ•  ๋ชฉ๋ก๋“ค์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ์†์„ฑ

files ์†์„ฑ์€ exclude๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค. 

๋งŒ์ผ ์ด ์†์„ฑ์ด ์ƒ๋žต๋˜๋ฉด, include์™€ exclude์†์„ฑ์œผ๋กœ ์ปดํŒŒ์ผ ๋Œ€์ƒ์„ ๊ฒฐ์ •ํ•œ๋‹ค.

 

{
  "files": [ // ํŒŒ์ผ ํ™•์žฅ์ž๊นŒ์ง€ ์ •ํ™•ํžˆ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•œ๋‹ค
    "src/main.ts",
    "src/utils.ts",
    "src/types.d.ts"
  ]
}

 

extends

 

extends๋Š” ๋‹ค๋ฅธ tsconfig.jsonํŒŒ์ผ์˜ ์„ค์ •๋“ค์„ ๊ฐ€์ ธ์™€ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์˜ต์…˜์ด๋‹ค.

๋ณดํ†ต extends์†์„ฑ์€ tsconfig.jsonํŒŒ์ผ์˜ ์ตœ์ƒ์œ„์— ์œ„์น˜ํ•œ๋‹ค.

 

์˜ˆ๋ฅผ๋“ค์–ด config/base.json ํŒŒ์ผ์˜ ์†์„ฑ ์„ค์ •์„ 

ํ˜„ tsconfig.json ํŒŒ์ผ์— ํฌ๋งท์ด ๋งž์œผ๋ฉด baseํŒŒ์ผ์˜ ์„ค์ •์„ ์ƒ์† ๋ฐ›๊ฒŒ ๋œ๋‹ค.

 

// config/base.json
{
  "compilerOptions": {
    "noImplicitAny": true,
    "strictNullChecks": true
  }
}
{
  "extends": "./configs/base",
  "compilerOptions": {
    "strictNullChecks": false
  },
  "files": [
    "src/main.ts",
    "src/utils.ts",
    "src/types.d.ts"
  ]
}

 

include

 

include ์†์„ฑ์€ files ์†์„ฑ๊ณผ ๊ฐ™์ด ํ”„๋กœ์ ํŠธ์—์„œ ์ปดํŒŒ์ผํ•  ํŒŒ์ผ๋“ค์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ์ด์ง€๋งŒ, ์™€์ผ๋“œ ์นด๋“œ ํŒจํ„ด์œผ๋กœ ์ง€์ •ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ๋˜ํ•œ include๋Š” files ์†์„ฑ๊ณผ๋Š” ๋‹ฌ๋ฆฌ exclude๋ณด๋‹ค ์•ฝํ•ด include์— ๋ช…์‹œ๋˜์–ด ์žˆ์–ด๋„ exclude์—๋„ ๋ช…์‹œ๋˜์–ด ์žˆ์œผ๋ฉด ์ œ์™ธ ๋˜๊ฒŒ ๋œ๋‹ค.

 

{
  "compilerOptions": {
    ...
  },
  "include": [
    "src/*.ts", // src ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  .ts ํŒŒ์ผ
    "dist/test?.ts" // dist ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” test1.ts, test2.ts , test3.ts ..๋“ฑ์— ์ผ์น˜
    "test/**/*.spec.ts" // test ๋””๋ ‰ํ† ๋ฆฌ์™€ ๊ทธ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  .spec.ts ํŒŒ์ผ
  ]
}

 

์™€์ผ๋“œ ์นด๋“œ ํŒจํ„ด์ด๋ž€ tsconfig.json ํŒŒ์ผ์—์„œ include๋‚˜ exclude ์†์„ฑ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์ผ์น˜์‹œํ‚ค๋Š” ๊ธฐํ˜ธ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

*  : ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ

? : ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์˜ ์ด๋ฆ„ ์ค‘ ํ•œ ๊ธ€์ž๋ผ๋„ ํฌํ•จํ•˜๋ฉด ํ•ด๋‹น

** : ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์˜ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ํฌํ•จ

 

exclude

 

exclude ์†์„ฑ์€ ํ”„๋กœ์ ํŠธ์—์„œ ์ปดํŒŒ์ผ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•  ํŒŒ์ผ๋“ค์„ ์™€์ผ๋“œ์นด๋“œ ํŒจํ„ด์œผ๋กœ ์ง€์ •ํ•˜๋Š” ์†์„ฑ์ด๋‹ค.

์ฆ‰, include์˜ ๋ฐ˜๋Œ€๋ฒ„์ „์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

์™€์ผ๋“œ ์นด๋“œ ํŒจํ„ด์ด๋ž€?

 

  ์ปดํ“จํ„ฐ๋‚˜ ํŠน์ • ๋ช…๋ น์–ด๋กœ ๋ช…๋ น์„ ๋‚ด๋ฆด ๋•Œ, ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ํ•œ๊บผ๋ฒˆ์— ์ง€์ •ํ•  ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐํ˜ธ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

์ด ๋ฌธ์ž๋Š” ์–ด๋А ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ์•ฝ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ๋ณด์ธ๋‹ค.

์ฃผ๋กœ ํŠน์ •ํ•œ ํŒจํ„ด์ด ์žˆ๋Š” ๋ฌธ์ž์—ด ํ˜น์€ ํŒŒ์ผ์„ ์ฐพ๊ฑฐ๋‚˜, ๊ธด ์ด๋ฆ„์„ ์ƒ๋žตํ•  ๋–„ ์“ฐ์ธ๋‹ค.

 

{
  "compilerOptions": {
    ...
  },
  
  "exclude": [
    "node_modules", // node_modules ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ œ์™ธ
    "**/*.test.ts" // ๋ชจ๋“  .test.ts ํŒŒ์ผ์„ ์ œ์™ธ
  ]
}

 

compilerOptions

 

์ปดํŒŒ์ผ ๋Œ€์ƒ ํŒŒ์ผ๋“ค์„ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜ํ• ์ง€ ์„ธ์„ธํžˆ ์ •ํ•˜๋Š” ์˜ต์…˜

์ •๋ง ๋งŽ์€ ์˜ต์…˜๋“ค์ด ์žˆ๋‹ค.

 

{
  "compilerOptions": {
  
    /* ๊ธฐ๋ณธ ์˜ต์…˜
     * ------------------------------------------------------------------------------------------------------------------------------------------------ */
    "incremental": true,                   /* ์ฆ๋ถ„ ์ปดํŒŒ์ผ ํ™œ์„ฑํ™” */ 
    "target": "es5",                          /* ECMAScript ๋ชฉํ‘œ ๋ฒ„์ „ ์„ค์ •: 'ES3'(๊ธฐ๋ณธ), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
    "module": "esnext",                       /* ์ƒ์„ฑ๋  ๋ชจ๋“ˆ ์ฝ”๋“œ ์„ค์ •: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
    "lib": ["dom", "dom.iterable", "esnext"], /* ์ปดํŒŒ์ผ ๊ณผ์ •์— ์‚ฌ์šฉ๋  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ ์„ค์ • */
    "allowJs": true,                          /* JavaScript ํŒŒ์ผ ์ปดํŒŒ์ผ ํ—ˆ์šฉ */
    "checkJs": true,                       /* .js ํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฆฌํฌํŠธ ์„ค์ • */
    "jsx": "react",                           /* ์ƒ์„ฑ๋  JSX ์ฝ”๋“œ ์„ค์ •: 'preserve', 'react-native', or 'react'. */
    "declaration": true,                   /* '.d.ts' ํŒŒ์ผ ์ƒ์„ฑ ์„ค์ • */
    "declarationMap": true,                /* ํ•ด๋‹นํ•˜๋Š” ๊ฐ '.d.ts'ํŒŒ์ผ์— ๋Œ€ํ•œ ์†Œ์Šค ๋งต ์ƒ์„ฑ */
    "sourceMap": true,                     /* ์†Œ์Šค๋งต '.map' ํŒŒ์ผ ์ƒ์„ฑ ์„ค์ • */
    "outFile": "./",                       /* ๋ณต์ˆ˜ ํŒŒ์ผ์„ ๋ฌถ์–ด ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์ถœ๋ ฅ ์„ค์ • */
    "outDir": "./dist",                    /* ์ถœ๋ ฅ๋  ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ • */
    "rootDir": "./",                       /* ์ž…๋ ฅ ํŒŒ์ผ๋“ค์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •. --outDir ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด ์ถœ๋ ฅ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •์ด ๊ฐ€๋Šฅ */
    "composite": true,                     /* ํ”„๋กœ์ ํŠธ ์ปดํŒŒ์ผ ํ™œ์„ฑํ™” */
    "tsBuildInfoFile": "./",               /* ์ฆ๋ถ„ ์ปดํŒŒ์ผ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ํŒŒ์ผ ์ง€์ • */
    "removeComments": true,                /* ์ถœ๋ ฅ ์‹œ, ์ฃผ์„ ์ œ๊ฑฐ ์„ค์ • */
    "noEmit": true,                           /* ์ถœ๋ ฅ ๋ฐฉ์ถœ(emit) ์œ ๋ฌด ์„ค์ • */
    "importHelpers": true,                 /* 'tslib'๋กœ๋ถ€ํ„ฐ ํ—ฌํผ๋ฅผ ํ˜ธ์ถœํ•  ์ง€ ์„ค์ • */
    "downlevelIteration": true,            /* 'ES5' ํ˜น์€ 'ES3' ํƒ€๊ฒŸ ์„ค์ • ์‹œ Iterables 'for-of', 'spread', 'destructuring' ์™„๋ฒฝ ์ง€์› ์„ค์ • */
    "isolatedModules": true,                  /* ๊ฐ ํŒŒ์ผ์„ ๋ณ„๋„ ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜ ('ts.transpileModule'๊ณผ ์œ ์‚ฌ) */

    /* ์—„๊ฒฉํ•œ ์œ ํ˜• ๊ฒ€์‚ฌ ์˜ต์…˜
     * ------------------------------------------------------------------------------------------------------------------------------------------------ */
    "strict": true,                           /* ๋ชจ๋“  ์—„๊ฒฉํ•œ ์œ ํ˜• ๊ฒ€์‚ฌ ์˜ต์…˜ ํ™œ์„ฑํ™” */
    "noImplicitAny": true,                 /* ๋ช…์‹œ์ ์ด์ง€ ์•Š์€ 'any' ์œ ํ˜•์œผ๋กœ ํ‘œํ˜„์‹ ๋ฐ ์„ ์–ธ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ */
    "strictNullChecks": true,              /* ์—„๊ฒฉํ•œ null ๊ฒ€์‚ฌ ์‚ฌ์šฉ */
    "strictFunctionTypes": true,           /* ์—„๊ฒฉํ•œ ํ•จ์ˆ˜ ์œ ํ˜• ๊ฒ€์‚ฌ ์‚ฌ์šฉ */
    "strictBindCallApply": true,           /* ์—„๊ฒฉํ•œ 'bind', 'call', 'apply' ํ•จ์ˆ˜ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ */
    "strictPropertyInitialization": true,  /* ํด๋ž˜์Šค์—์„œ ์†์„ฑ ์ดˆ๊ธฐํ™” ์—„๊ฒฉ ๊ฒ€์‚ฌ ์‚ฌ์šฉ */
    "noImplicitThis": true,                /* ๋ช…์‹œ์ ์ด์ง€ ์•Š์€ 'any'์œ ํ˜•์œผ๋กœ 'this' ํ‘œํ˜„์‹ ์‚ฌ์šฉ ์‹œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ */
    "alwaysStrict": true,                  /* ์—„๊ฒฉ๋ชจ๋“œ์—์„œ ๊ตฌ๋ฌธ ๋ถ„์„ ํ›„, ๊ฐ ์†Œ์Šค ํŒŒ์ผ์— "use strict" ์ฝ”๋“œ๋ฅผ ์ถœ๋ ฅ */

    /* ์ถ”๊ฐ€ ๊ฒ€์‚ฌ ์˜ต์…˜
     * ------------------------------------------------------------------------------------------------------------------------------------------------ */
    "noUnusedLocals": true,                /* ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๋กœ์ปฌ์ด ์žˆ์„ ๊ฒฝ์šฐ, ์˜ค๋ฅ˜๋กœ ๋ณด๊ณ  */
    "noUnusedParameters": true,            /* ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ์˜ค๋ฅ˜๋กœ ๋ณด๊ณ  */
    "noImplicitReturns": true,             /* ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ์˜ค๋ฅ˜๋กœ ๋ณด๊ณ  */
    "noFallthroughCasesInSwitch": true,       /* switch ๋ฌธ ์˜ค๋ฅ˜ ์œ ํ˜•์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ๋ณด๊ณ  */
 	"noUncheckedIndexedAccess": true,      /* ์ธ๋ฑ์Šค ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๊ฒฐ๊ณผ์— 'undefined' ํฌํ•จ */

    /* ๋ชจ๋“ˆ ๋ถ„์„ ์˜ต์…˜
     * ------------------------------------------------------------------------------------------------------------------------------------------------ */
    "moduleResolution": "node",               /* ๋ชจ๋“ˆ ๋ถ„์„ ๋ฐฉ๋ฒ• ์„ค์ •: 'node' (Node.js) ๋˜๋Š” 'classic' (TypeScript pre-1.6). */
    "baseUrl": "./",                       /* ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋ชจ๋“ˆ์ด ์•„๋‹Œ, ๋ชจ๋“ˆ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ„์น˜ํ•œ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ • (์˜ˆ: './modules-name') */
    "paths": {},                           /* 'baseUrl'์„ ๊ธฐ์ค€์œผ๋กœ ์ƒ๋Œ€ ์œ„์น˜๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ๋‹ค์‹œ ๋งคํ•‘ํ•˜๋Š” ํ•ญ๋ชฉ ์„ค์ • */
    "rootDirs": [],                        /* ๋Ÿฐํƒ€์ž„ ์‹œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋กœํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋ชฉ๋ก */
    "typeRoots": [],                       /* ์œ ํ˜• ์ •์˜๋ฅผ ํฌํ•จํ•  ๋””๋ ‰ํ† ๋ฆฌ ๋ชฉ๋ก */
    "types": [],                           /* ์ปดํŒŒ์ผ ์‹œ ํฌํ•จ๋  ์œ ํ˜• ์„ ์–ธ ํŒŒ์ผ ์ž…๋ ฅ */
    "allowSyntheticDefaultImports": true,     /* ๊ธฐ๋ณธ ์ถœ๋ ฅ(default export)์ด ์—†๋Š” ๋ชจ๋“ˆ๋กœ๋ถ€ํ„ฐ ๊ธฐ๋ณธ ํ˜ธ์ถœ์„ ํ—ˆ์šฉ (์ด ์ฝ”๋“œ๋Š” ๋‹จ์ง€ ์œ ํ˜• ๊ฒ€์‚ฌ๋งŒ ์ˆ˜ํ–‰) */
    "esModuleInterop": true,                   /* ๋ชจ๋“  ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ†ตํ•ด CommonJS์™€ ES ๋ชจ๋“ˆ ๊ฐ„์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ์ œ๊ณต. 'allowSyntheticDefaultImports' ์•”์‹œ */
    "preserveSymlinks": true,              /* symlinks ์‹ค์ œ ๊ฒฝ๋กœ๋กœ ๊ฒฐ์ •ํ•˜์ง€ ์•Š์Œ */
    "allowUmdGlobalAccess": true,          /* ๋ชจ๋“ˆ์—์„œ UMD ๊ธ€๋กœ๋ฒŒ์— ์ ‘๊ทผ ํ—ˆ์šฉ */

    /* ์†Œ์Šค๋งต ์˜ต์…˜
     * ------------------------------------------------------------------------------------------------------------------------------------------------ */
    "sourceRoot": "./",                    /* ๋””๋ฒ„๊ฑฐ(debugger)๊ฐ€ ์†Œ์Šค ์œ„์น˜ ๋Œ€์‹  TypeScript ํŒŒ์ผ์„ ์ฐพ์„ ์œ„์น˜ ์„ค์ • */
    "mapRoot": "./",                       /* ๋””๋ฒ„๊ฑฐ๊ฐ€ ์ƒ์„ฑ๋œ ์œ„์น˜ ๋Œ€์‹  ๋งต ํŒŒ์ผ์„ ์ฐพ์„ ์œ„์น˜ ์„ค์ • */
    "inlineSourceMap": true,               /* ํ•˜๋‚˜์˜ ์ธ๋ผ์ธ ์†Œ์Šค๋งต์„ ๋‚ด๋ณด๋‚ด๋„๋ก ์„ค์ • */
    "inlineSources": true,                 /* ํ•˜๋‚˜์˜ ํŒŒ์ผ ์•ˆ์— ์†Œ์Šค์™€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ๋‚ด๋ณด๋‚ด๋„๋ก ์„ค์ •. '--inlineSourceMap' ๋˜๋Š” '--sourceMap' ์„ค์ •์ด ํ•„์š” */

    /* ์‹คํ—˜์ ์ธ ๊ธฐ๋Šฅ ์˜ต์…˜
     * ------------------------------------------------------------------------------------------------------------------------------------------------ */
    "experimentalDecorators": true,        /* ES7 ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ(decorators) ์‹คํ—˜ ๊ธฐ๋Šฅ ์ง€์› ์„ค์ • */
    "emitDecoratorMetadata": true,         /* ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์œ ํ˜• ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐฉ์ถœ ์‹คํ—˜ ๊ธฐ๋Šฅ ์ง€์› ์„ค์ • */
    
    /* ๊ณ ๊ธ‰ ์˜ต์…˜
     * ------------------------------------------------------------------------------------------------------------------------------------------------ */
    "skipLibCheck": true,                     /* ์„ ์–ธ ํŒŒ์ผ ์œ ํ˜• ๊ฒ€์‚ฌ ์Šคํ‚ต */
    "forceConsistentCasingInFileNames": true  /* ๋™์ผํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ผ๊ด€๋˜์ง€ ์•Š์€ ์ผ€์ด์Šค ์ฐธ์กฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ */
    
  }
}