๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

React Typescript ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ tsconfig.js ์„ค์ • ๋ณธ๋ฌธ

Study/React

React Typescript ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ tsconfig.js ์„ค์ •

Shinjio 2025. 2. 8. 15:18
๋ฐ˜์‘ํ˜•

React + Typescript ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

ํ˜„์žฌ ๊ฒฝ๋กœ์— typescript React ์•ฑ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

yarn create react-app . --template typescript

 

 

tsconfig.js

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

๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฝ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ ํ•ด์•ผ ํ•œ๋‹ค. 

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

 

{
    //์ปดํŒŒ์ผ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•  ํŒŒ์ผ๋“ค์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ
    "exclude": [],
    // ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์˜ต์…˜๋“ค์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ
    "compilerOptions": {
        "target": "es5",
        "lib": ["dom", "dom.iterable", "esnext"], //์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
        "allowJs": true, //์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ์ปดํŒŒ์ผ ํ—ˆ์šฉ
        "skipLibCheck": true, //์„ ์–ธ ํŒŒ์ผ ์œ ํ˜• ๊ฒ€์‚ฌ ์Šคํ‚ต
        "esModuleInterop": true, //๋ชจ๋“  ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ†ตํ•ด CommonJS์™€ ES ๋ชจ๋“ˆ ๊ฐ„์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ์ œ๊ณต
        "allowSyntheticDefaultImports": true, //๊ธฐ๋ณธ ์ถœ๋ ฅ(default export)์ด ์—†๋Š” ๋ชจ๋“ˆ๋กœ๋ถ€ํ„ฐ ๊ธฐ๋ณธ ํ˜ธ์ถœ์„ ํ—ˆ์šฉ (์ด ์ฝ”๋“œ๋Š” ๋‹จ์ง€ ์œ ํ˜• ๊ฒ€์‚ฌ๋งŒ ์ˆ˜ํ–‰)
        "strict": true, //์—„๊ฒฉํ•œ ์œ ํ˜• ๊ฒ€์‚ฌ ์˜ต์…˜ ํ™œ์„ฑํ™”
        "forceConsistentCasingInFileNames": true, //๋™์ผํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ผ๊ด€๋˜์ง€ ์•Š์€ ์ผ€์ด์Šค ์ฐธ์กฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ
        "noFallthroughCasesInSwitch": true, //switch ๋ฌธ ์˜ค๋ฅ˜ ์œ ํ˜•์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ๋ณด๊ณ 
        "module": "esnext", // ์ƒ์„ฑ๋  ๋ชจ๋“ˆ ์ฝ”๋“œ ์„ค์ •: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'.
        "moduleResolution": "node", //๋ชจ๋“ˆ ๋ถ„์„ ๋ฐฉ๋ฒ• ์„ค์ •: 'node' (Node.js) ๋˜๋Š” 'classic' (TypeScript pre-1.6)
        "resolveJsonModule": true, // ts ํŒŒ์ผ์—์„œ json imoprt ํ—ˆ์šฉ
        "isolatedModules": true, //๊ฐ ํŒŒ์ผ์„ ๋ณ„๋„ ๋ชจ๋“ˆ๋กœ ๋ณ€ํ™˜
        "noEmit": true, //์ถœ๋ ฅ ๋ฐฉ์ถœ ์œ ๋ฌด ์„ค์ •
        "jsx": "react-jsx" //์ƒ์„ฑ๋  JSX ์ฝ”๋“œ ์„ค์ •: 'preserve', 'react-native', or 'react'.
    },
    //์ปดํŒŒ์ผํ•  ํŒŒ์ผ๋“ค์˜ ๊ฐœ๋ณ„ ๋ชฉ๋ก์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ
    //exclude๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค.
    "files": [],
    //์ปดํŒŒ์ผํ•  ํŒŒ์ผ๋“ค์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ (์™€์ผ๋“œ ์นด๋“œ ํŒจํ„ด์œผ๋กœ ๋ฌถ์–ด ํ‘œํ˜„)
    //์šฐ์„ ์ˆœ์œ„๊ฐ€ exclude ๋ณด๋‹ค ์•ฝํ•˜๋‹ค.
    //์™€์ผ๋“œ ์นด๋“œ ํŒจํ„ด
    // *: ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ
    // ?: ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์˜ ์ด๋ฆ„ ์ค‘ ํ•œ ๊ธ€์ž๋ผ๋„ ํฌํ•จ๋˜๋ฉด ํ•ด๋‹น
    // **: ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์˜ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ๋“ค์„ ํฌํ•จ
    "include": ["src"],

    //๋‹ค๋ฅธ tsconfig.json ํŒŒ์ผ์„ ์ƒ์†๋ฐ›์•„์„œ ์„ค์ •์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์†์„ฑ
    "extends": ""
}

 

 

* create react-app์œผ๋กœ ์„ค์น˜ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ˆ„๊ฐ€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๊ฐ€?

์ด ๊ฒฝ์šฐ์—๋Š” ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์‹œ ์ž๋™์œผ๋กœ ์„ค์น˜๋œ react-scripts๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ tsc ์—†์ด Babel์„ ์‚ฌ์šฉํ•˜์—ฌ Typescript ์ฝ”๋“œ๋ฅผ Javascript๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. 

 

package.json ํŒŒ์ผ ๋‚ด react-scripts๊ฐ€ ํฌํ•จ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

react-scripts๋Š” TypeScript ์ปดํŒŒ์ผ์„ ์œ„ํ•ด tsc๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Babel์„ ์‚ฌ์šฉํ•œ๋‹ค. 

Babel์€ TypeScript์˜ ํƒ€์ž… ์ฒดํฌ ์—†์ด ์ฝ”๋“œ ๋ณ€ํ™˜(ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง)๋งŒ ์ˆ˜ํ–‰ํ•˜์—ฌ .tsx ๋ฐ .ts ํŒŒ์ผ์„ .js๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. 

ํƒ€์ž… ์ฒดํฌ๋Š” tsc๊ฐ€ ์•„๋‹ˆ๋ผ eslint์™€ typescript๊ฐ€ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

 

** Babel

Babel์€ ์ตœ์‹  JavaScript(ES ์ด์ƒ) ๋ฐ TypeScript ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€ํ™˜(ํŠธ๋žœ์ŠคํŒŒ์ผ)ํ•˜๋Š” JavaScript ์ปดํŒŒ์ผ๋Ÿฌ๋กœ tsc ์ฒ˜๋Ÿผ ํƒ€์ž… ์ฒดํฌ๋ฅผ ํ•˜์ง€ ์•Š๊ณ , ๋‹จ์ˆœํžˆ TypeScript ์ฝ”๋“œ์—์„œ ํƒ€์ž… ๊ด€๋ จ ๋ถ€๋ถ„๋งŒ ์ œ๊ฑฐํ•œ ํ›„ JavaScript๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

** tsc

TypeScript Compiler๋กœ TypeScript ์ฝ”๋“œ๋ฅผ JavaScript๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋„๊ตฌ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ณต์‹ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ, Babel๊ณผ ๋‹ฌ๋ฆฌ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

 

 

๐Ÿ“˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ ์„ค์ • - tsconfig ์˜ต์…˜ ์ด์ •๋ฆฌ

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

inpa.tistory.com

 

๋ฐ˜์‘ํ˜•