できない.dev

ESLint で「TSConfig does not include this file」が解決できない

型情報を使うルールで `Parsing error: ... however that TSConfig does not include this file` が出るのは、対象ファイルが tsconfig の include 範囲外のため。
projectService に切り替えるか、対象を含む tsconfig を指定する。

#eslint#typescript-eslint#parsing-error#tsconfig#typed-linting

公開: 更新:

要約

型情報を使うルール(typed linting)を有効にすると、Parsing error: ESLint was configured to run on <file> ... however that TSConfig does not include this file が出ることがあります。
これは、そのファイルが parserOptions.project で指定した tsconfig の対象範囲に入っていないことが原因です。
最も手軽な解決は、typescript-eslint v8 の projectService に切り替えることです。

よくある原因

  1. include 範囲外: tsconfig.jsonincludesrc 配下だけで、ルートの設定ファイルや scripts/ 配下を lint しようとしている。
  2. project の指す範囲が狭い: parserOptions.project に渡した tsconfig が、一部のファイルしかカバーしていない。
  3. プロジェクト外ファイル: eslint.config.js 自身など、ビルド対象に含めない JS / TS を型付きルールで lint している。
  4. モノレポ構成: ルートと各パッケージの tsconfig の関係が整理されておらず、対象から漏れるファイルがある。

解決策

1. projectService に切り替える(推奨)

typescript-eslint v8 以降は、tsconfig を自動で解決する projectService が推奨です。

// eslint.config.js
import tseslint from 'typescript-eslint'
 
export default tseslint.config({
  languageOptions: {
    parserOptions: {
      projectService: true,
      tsconfigRootDir: import.meta.dirname,
    },
  },
})

Typed Linting のトラブルシューティング でも、まず projectService を試すことが案内されています。

2. lint 専用の tsconfig を用意する

範囲をきめ細かく制御したいときは、tsconfig.eslint.json を作って対象を広げます。

{
  "extends": "./tsconfig.json",
  "include": ["src", "scripts", "*.config.ts"]
}
parserOptions: {
  project: './tsconfig.eslint.json',
}

3. 型情報が不要なファイルは外す

設定ファイルなど型付きルールが要らないファイルは、files で範囲を分けて型なし設定を当てます。

export default tseslint.config(
  { files: ['**/*.ts'], extends: [...tseslint.configs.recommendedTypeChecked] },
  { files: ['*.config.js'], extends: [tseslint.configs.disableTypeChecked] },
)

対象ファイルだけに型付きルールを当てることで、TSConfig does not include 系のエラーを根本から避けられます。

この記事は役立ちましたか?