tsSetting
react에 typescript를 적용하고 싶다면 처음부터 타입스크립트 프로젝트로 적용시켜 주는 방법이 있고, javascript를 사용하는 코드를 타입스크립트로 전환시켜주는 방법이 있다.
첫 번째 방법 : 처음부터 타입스크립트 프로젝트로 만들기
npx create-react-app app-name --template typescript 이 명령어만 입력하면 자동으로 타입스크립트 환경을 세팅해준다. 너무 쉬우므로 js를 ts로 전환하는 두 번째 방법으로 넘어가자.
두 번째 방법 : js리액트 프로젝트를 ts리액트 프로젝트로 전환하기
리액트 프로젝트를 진행하다 보면 babel과 webpack이 필요한 상황이 올 것이다. 그 떄 ts-loader를 사용하면 쉽게 설정할 수 있으므로 ts-loader를 기반으로 세팅한 ts환경을 예시로 보여주겠다. 아래는 현재 진행하고 있는 토이프로젝트의 초기 세팅 파일이다.
package.json
{
"name": "rochest-frontend",
"version": "0.1.0",
"dependencies": {
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",
"@types/jest": "^27.0.1",
"@types/node": "^14.6.1",
"@types/react": "^16.9.48",
"@types/react-dom": "^17.0.9",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.3",
"ts-loader": "^8.0.3",
"typescript": "^3.9.7",
"web-vitals": "^1.0.1"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
} tsconfig.json
{
"extends": "./tsconfig-base.json",
"files": [
"src/index.tsx"
],
"compilerOptions": {
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true
},
"include": [
"src"
]
}tsconfig-base.json
{
"compilerOptions": {
"declaration": true,
"declarationMap": true,
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"esModuleInterop": true,
"composite": true,
"jsx": "react",
}
}이렇게 세팅한 후 기존 js파일들을 tsx파일로 파일명만 바꿔주고, 추가적으로 바벨이나 웹펙이 필요하면 문서를 읽고 설정파일만 바꿔주면 될 것이다.
ts-loader demo github : https://github.com/TypeStrong/ts-loader/tree/3f3c0d779a9df614b978764e976d934d08f1fdca/examples/project-references-example
Last updated