Typesciprt를 react에 적용하는 2가지 방법
1. CRA에 적용하기(CRA공식문서)
2. 수동으로 webpack부터 전부 설정하기(공식문서참고,김정환블로그)
우선은 CRA에 적용하는 방법부터 살펴보기로 하자!
npx create-react-app 프로젝트이름 --template typescript
npm i --save react react-dom
npm i --save-dev @types/react @types/react-dom
npm i --save-dev @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-react
.eslint.rc
를 설정해주자module.exports = {
parser: "@typescript-eslint/parser", // Specifies the ESLint parser
extends: [
"plugin:react/recommended", // Uses the recommended rules from @eslint-plugin-react
"plugin:@typescript-eslint/recommended" // Uses the recommended rules from @typescript-eslint/eslint-plugin
],
parserOptions: {
ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features
sourceType: "module", // Allows for the use of imports
ecmaFeatures: {
jsx: true // Allows for the parsing of JSX
}
},
rules: {
},
settings: {
react: {
version: "detect" // Tells eslint-plugin-react to automatically detect the version of React to use
}
}
};
위의 2가지 설치
npm i --save-dev eslint-config-prettier eslint-plugin-prettier
pretter.rc 설정
본인이 원하는 스타일로 설정하고 싶으면 블로그참조, 공식문서
module.exports = {
semi: true,
trailingComma: "all",
singleQuote: true,
printWidth: 120,
tabWidth: 4
};
module.exports = {
parser: '@typescript-eslint/parser',
extends: [
'plugin:@typescript-eslint/recommended',
'prettier/@typescript-eslint',
'plugin:prettier/recommended',
],
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures: {
jsx: true,
},
},
rules: {
// 추후 .prettierrc.js 파일에서 설정해줄 예정
},
settings: {
react: {
version: 'detect',
},
},
};
{
"eslint.autoFixOnSave": true, // has been deprecated, use editor.codeActionsOnSave // instead 라고 써있었지만 주석 처리를 하면 저장 시 // formatting이 안되어서 주석을 풀었다.
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.validate": [
"javascript",
"javascriptreact",
{ "language": "typescript", "autoFix": true },
{ "language": "typescriptreact", "autoFix": true }
],
{
"editor.formatOnSave": true,
"[javascript]": {
"editor.formatOnSave": false
},
"[javascriptreact]": {
"editor.formatOnSave": false
},
"[typescript]": {
"editor.formatOnSave": false
},
"[typescriptreact]": {
"editor.formatOnSave": false
}
}