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 に切り替えることです。
よくある原因
- include 範囲外:
tsconfig.jsonのincludeがsrc配下だけで、ルートの設定ファイルやscripts/配下を lint しようとしている。 - project の指す範囲が狭い:
parserOptions.projectに渡した tsconfig が、一部のファイルしかカバーしていない。 - プロジェクト外ファイル:
eslint.config.js自身など、ビルド対象に含めない JS / TS を型付きルールで lint している。 - モノレポ構成: ルートと各パッケージの 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 系のエラーを根本から避けられます。