You may create a new react app with typescript like so:
Copy 1
npx create-react-app my-app --template typescript
Now let’s setup eslint and prettier.
Remove eslintConfig
from package.json
.
Install prettier
using these commands:
Copy 1
2
3
yarn add --dev --exact prettier
# these are for making eslint and prettier to play well together
yarn add --dev eslint-config-prettier eslint-plugin-prettier
Create config files like this:
Copy 1
touch .eslintrc.js .eslintignore .prettierrc.js .prettierignore
Use same contents for both ignore files:
Copy build
node_modules
.github
You can use cli init
command for eslint and prettier config, but here’s a ready-to-go scripts:
Copy 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// .eslintrc.js
module.exports = {
env: {
browser: true ,
es6: true ,
node: true ,
},
extends : [
'prettier' ,
'prettier/prettier' ,
'eslint:recommended' ,
'plugin:react/recommended' ,
'plugin:react-hooks/recommended' ,
'plugin:prettier/recommended' ,
'plugin:jsx-a11y/strict' ,
],
parser: '@typescript-eslint/parser' ,
parserOptions: {
ecmaFeatures: {
jsx: true ,
},
ecmaVersion: 2020 ,
sourceType: 'module' ,
},
plugins: ['react' , 'jsx-a11y' , '@typescript-eslint' ],
rules: {
'react-hooks/exhaustive-deps' : 'error' ,
'no-var' : 'error' ,
'brace-style' : 'error' ,
'prefer-template' : 'error' ,
radix: 'error' ,
'space-before-blocks' : 'error' ,
'import/prefer-default-export' : 'off' ,
},
overrides: [
{
files: [
'**/*.test.js' ,
'**/*.test.jsx' ,
'**/*.test.tsx' ,
'**/*.spec.js' ,
'**/*.spec.jsx' ,
'**/*.spec.tsx' ,
],
env: {
jest: true ,
},
},
],
};
Copy 1
2
3
4
5
6
7
8
9
//.prettierrc.js
module.exports = {
printWidth: 100 ,
tabWidth: 2 ,
singleQuote: true ,
semi: false ,
trailingComma: 'all' ,
arrowParens: 'avoid' ,
};
Add these scripts to package.json
file:
Copy "lint": "eslint . --fix",
"format": "prettier . --write"
Now you are good to run yarn lint
and yarn format
.
Let’s setup git precommit hooks with husky
and lint-staged
.
Install lint-staged
first:
Copy 1
yarn add --dev lint-staged
Add these lines to your package.json
file:
Copy "lint-staged": {
"*.{js,ts,tsx}": [
"eslint --quiet --fix"
],
"*.{json,md,html}": [
"prettier --write"
]
}
Install and configure husky like so:
Copy 1
2
3
npx husky-init
yarn
npx husky add .husky/pre-commit "yarn lint-staged"
That’s pretty much.
Happy coding! :)