반응형
이제는 React 프로젝트에 TypeScript를 적용하지 않은 케이스를 만나는 게 어려운 시대가 되었다. 프로젝트 생성할 때마다 매번 공식 문서를 확인하고 검색하는 나 자신을 위해서 기록용으로 소소하게 남겨두려고 한다.
우선 해야 할 작업들은 다음과 같다.
- CRA(create-react-app)에 TypeScript 템플릿을 적용하여 프로젝트를 생성하기
- eslint, prettier를 적용하여 코드 컨벤션 보장하기
- typescript가 필요한 라이브러리 세팅
- tsconfig.json에 src 절대 경로 세팅
1️⃣ CRA(create-react-app) + TypeScript
TypeScript 로 새로운 Create React App 프로젝트를 생성하려면 원하는 디렉터리에서 아래 명령어를 작성한다.
npx create-react-app my-app --template typescript
또는 yarn으로 생성하려면 아래 명령어를 입력하면 된다.
yarn create react-app my-app --template typescript
그럼 이렇게 프로젝트가 생성되고, tsconfig.json도 생긴 것을 확인할 수 있다. 원한다면 생성된 TypeScript 구성을 편집할 수 있다.
2️⃣ ESLint, Prettier 세팅
우선 vscode에 익스텐션을 설치해준다.
다음으로는 생성한 프로젝트에서 라이브러리를 추가해 준다.
npm install eslint prettier eslint-config-prettier eslint-plugin-prettier --save-dev
마지막으로 .eslintrc, .prettierrc을 생성해서 세팅한 뒤, vscode 설정에 가서 Formatter를 검색해서 Prettier로 변경해주자. FormatOnSave도 true로 변경해준다면 저장 시 코드를 포매팅할 수 있다.
.eslintrc
// .eslintrc
{
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint", "prettier"],
"extends": [
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended"
],
"parserOptions": {
"ecmaVersion": "latest",
"ecmaFeatures": {
"jsx": true
}
},
"rules": {
"react/jsx-uses-vars": "error",
"react/prop-types": 0,
"react/react-in-jsx-scope": 0,
"@typescript-eslint/explicit-module-boundary-types": 0
},
"settings": {
"import/resolver": {
"node": {
"extensions": [".js", ".jsx", ".ts", ".tsx"]
}
}
}
}
.prettierrc
// .prettierrc
{
"arrowParens": "always",
"bracketSpacing": true,
"jsxBracketSameLine": false,
"jsxSingleQuote": false,
"orderedImports": true,
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "all",
"useTabs": false,
"printWidth": 80
}
3️⃣ 라이브러리 TypeScript 세팅
필요한 라이브러리도 TypeScript 세팅해 준다.
npm i --save react react-dom typescript
npm i --save-dev @types/react @types/react-dom @types/node
4️⃣ tsconfig.json 에 src 절대 경로 세팅
tsconfig.json는 아래처럼 수정해 준다. 사실 변경된 부분은 두 가지다.
- (수정) "target": "es5" -> "es6"
- (추가) "baseUrl": "./src"
// tsconfig.json
{
"compilerOptions": {
"target": "es6",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"baseUrl": "./src",
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": [
"src"
]
}
📄 참고
반응형
'Programming > React' 카테고리의 다른 글
[React] Hooks란? 사용방법과 배경 정리 (useEffect, useState, Custom Hook) (2) | 2023.04.21 |
---|---|
Typescript에서 useState를 props로 넘기는 법 (0) | 2022.11.09 |
React에서 <input> 태그를 사용할 때 주의할 점 (0) | 2021.07.23 |
[React] React onClick에 여러 함수를 넣고 싶다면 (+주의사항) (0) | 2021.07.23 |
React, React-Native 한 번에 여러 스타일 적용하는 법 (0) | 2021.07.23 |
댓글