์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ๊ฐ์ดํ ์ข ๋ญ๊ฐ๋น
- ์ฑ
- ์ํ์ฃผ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์ค๋ผํด
- ์ํ
- ๋ฐฐ์์ ๋ฐฐ์
- ์นํผ๋ธ๋ฆฌ์ฑ
- ์ ๋ฆฌํธ๋ฆฌํธ
- ํ์ด์ฌ
- ์ค๋ธ์
- ์นดํ๋๊ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐ์ํ
- ์๋ฐ
- html
- ๊ฐ๋ฐ
- ํ์ฒ์ ๋ฆฌํธ๋ฆฌํธ
- ๋ ์
- css
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- Python
- ํ๋ก๊ทธ๋๋ฐ
- JavaScript
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- database
- ์ฝ๋ฉ
- Java
- ๋๊ฐ
- Today
- Total
JiYoung Dev ๐ฅ
React Typescript ํ๋ก์ ํธ ์์ฑ ๋ฐ tsconfig.js ์ค์ ๋ณธ๋ฌธ
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
'Study > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Frontend Fundemental (ํ ์ค, ํ๋ก ํธ์๋ ์ข์ ์ฝ๋ ์์ฑํ๊ธฐ) ์ ๋ฆฌ (1) | 2025.01.16 |
---|---|
Javascript Call Stack, Callback Queue, Event Loop (2) | 2024.11.29 |
Webpack: ๊ฐ๋ ๊ณผ ์ค์ (0) | 2024.11.27 |
[React] ๋๋๊ทธ ์ค ๋๋กญ ํ์ผ ์ ๋ก๋ ๊ธฐ๋ฅ ๊ตฌํ (1) | 2024.11.05 |
[React] Spring Boot์ ์ฐ๋ํ์ฌ shop ๋ง๋ค๊ธฐ (2023.06.09) (0) | 2023.06.09 |