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 件のコメント:
コメントを投稿