【eslint】 JavaScript (*.js) と TypeScript (*.ts) が混同しているプロジェクトに typescript-eslint を導入した際のメモ
最近、実践TypeScriptという本を読み切りました。 (全てものにできたかというと...orz また何かを作りながら読み返す必要がありそう...)
勉強しながら検証コードを書いていたところで、typescript-eslint
というeslint系のライブラリの存在を知りました。
typescript-eslint
を jsファイル(JavaScript) / tsファイル(TypeScript)が混同したリポジトリに導入しようとした際、typescript-eslint
がjsファイルにも適用、大量のエラー / 警告が発生してしまいました。
この記事では、上記の現象を解決した際のメモを書き留めておきたいと思います。
typescript-eslint
とtslint
について
typescript-eslint
は、eslintのTypeScript版のプラグインです。
同じようなLintツールとして、tslint
というものも存在します。
tslint
とtypescript-eslint
の違いはなんだろう...?と思っていたところ、
typescript-eslint
のREADME.mdにtslint
→typescript-eslint
に移行する旨が記載されていました。
以下の記事にて、移行する経緯の要約・解説がされています。もし、経緯が気になる方は以下の記事を参照してみてください。
tslint
の設定を使い続けたいという方(2019/09頃時点)
typescript-eslint
のREADME.mdにて、eslint-plugin-tslint
というプラグインが紹介されています。
{ "plugins": [ "@typescript-eslint/tslint" ], "parserOptions": { "project": "tsconfig.json", }, "rules": { "@typescript-eslint/tslint/config": ["warn", { "lintFile": "", // path to tslint.json of your project "rules": { // tslint rules (will be used if `lintFile` is not specified) }, "rulesDirectory": [ // array of paths to directories with rules, e.g. 'node_modules/tslint/lib/rules' (will be used if `lintFile` is not specified) ] }], } }
lintFile
にtslint.json
のパスを指定してあげれば、eslint
にtslint
の設定を引き当てることができそうです。
自分自身も試していなく、申し訳ないのですが、もしtslint
の設定を使い続けたい方は、eslint-plugin-tslint
の導入を検討してみるのも良いかもしれません。
本編
では、
typescript-eslint
を jsファイル(JavaScript) / tsファイル(TypeScript)が混同したリポジトリに導入しようとした際、typescript-eslint
がjsファイルにも適用、大量のエラー / 警告が発生してしまいました。
の解決手順を書いていきます。
解決手順
eslintでは、ファイルごとに設定を変更できるGlob
という仕組みがあります。
それをoverrides
と併用し、
module.exports = { // 共通の設定 env: { es6: true, node: true }, extends: ['eslint:recommended'], globals: { Atomics: 'readonly', SharedArrayBuffer: 'readonly' }, parserOptions: { ecmaVersion: 2018, sourceType: 'module' }, rules: { // 共通のルールを設定 semi: ['error', 'never'], quotes: ['error', 'single'], indent: ['error', 2] }, overrides: [ // TypeScript系ファイルへのルールを設定 { files: ['**/*.ts'], extends: [ 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended' ], parser: '@typescript-eslint/parser', parserOptions: { sourceType: 'module', project: './tsconfig.json' }, plugins: ['@typescript-eslint'], rules: { // TypeScript系のファイルに対しての設定を行う } } ] }
のような形で書きます。
すると、typescript-eslint
の設定がTypeScript (.ts)のみに反映され、JavaScript(.js)に対してはtypescript-eslint
の設定が行われない状態となります。
おわり
一読ありがとうございました。 🙇♂️
間違いや気づき点等ありましたら、フィードバックいただけると助かります! 🙏
参考文献
以下、お世話になった記事となります。