typescriptを最近使い始めたわけで。
lintをするにはtslintが一般的だったんだけど、なんかeslintでもできるようになるよみたいなニュースもあったし、VSCodeのtslintのプラグインにdeprecatedっていう名前がつき始めるし。
ってことでtslintじゃなくてeslintでlintしちゃおうかな〜っていう。
で、さらにいつもeslintではairbnbでやってたから今回もairbnbでlintしたいなぁと。
ということで今日は@typescript-eslintを使ってeslintのairbnbをtypescriptにも適用しちゃおう的なお話をば。
ちなみについでにhooksのlintも入れてみましょう的な。
とりあえず入れておくべきnpmはこちら。
$ npm install --save-dev \ @typescript-eslint/eslint-plugin \ babel-eslint \ eslint \ eslint-config-airbnb \ eslint-plugin-import \ eslint-plugin-jsx-a11y \ eslint-plugin-react \ eslint-plugin-react-hooks \
で、そしたら.eslintrc.jsを作成しましょう的な。
module.exports = {
"parser": "@typescript-eslint/parser",
"env": {
"es6": true,
"browser": true
},
"extends": [
"airbnb"
],
"globals": {
"__DEV__": true
},
"plugins": [
"@typescript-eslint",
"react-hooks"
],
"parserOptions": {
"sourceType": "module",
"project": "./tsconfig.json"
},
"settings": {
"import/extensions": [
".js",
".jsx",
".ts",
".tsx"
],
"import/core-modules": [
"app"
],
"import/resolver": {
"node": {
"extensions": [
".js",
".jsx",
".ts",
".tsx"
]
}
}
},
"rules": {
"react/prop-types": [
0
],
"react-hooks/rules-of-hooks": "error",
"react/jsx-filename-extension": [
"error",
{
"extensions": [
".js",
".jsx",
".ts",
".tsx"
]
}
],
"import/extensions": [
"error", "always",
{
"js": "never",
"jsx": "never",
"ts": "never",
"tsx": "never"
}
]
}
}
parserを@typescript-eslint/parserにしてあげ、pluginsに@typescript-eslintをいれ、ついでにreact-hooksもいれる。
で、parserOptionsのprojectをtsconfig.jsonにしてあげる。
これでいけるっちゃいけるんだけど、若干エラーが出てきてしまうところがあるので下記を直しましょう的な。
・prop-types
これは正直いらないのでなくしましょう的な。
・import/no-unresolved
settingsにimport/extensionsとしてtsも入れたり、import/resolverにもtsとか入れたり、rulesでimport/extensions設定してあげたり、jsx-filename-extension設定したり。
細かく検証していないからsettingsだけでよかったりするかもだけど。
ってな感じでやってあげれば一応大丈夫だった気がする。
とりあえずこれで安心してようやくtypescriptで進められそうな的なみたいな。
ちなみに先日こちらの記事(@typescript-eslint ことはじめ)がバズってたのでこちらを参考にしてもよいかと。
あとVSCodeを使っているならば.vscode/settings.jsonも下記にしておきましょう的な。
{
"eslint.nodePath": "./node_modules/eslint",
"eslint.run": "onSave",
"eslint.autoFixOnSave": true,
"eslint.alwaysShowStatus": true,
"eslint.enable": true,
"eslint.validate": [
"javascript",
"javascriptreact",
{
"language": "typescript",
"autoFix": true
},
{
"language": "typescriptreact",
"autoFix": true
}
]
}

0 件のコメント:
コメントを投稿