使用TypeScript时ESLint为何会检测自身配置文件?
问题分析与解决
核心原因
当你在ESLint配置中开启parserOptions.project时,@typescript-eslint/parser会强制要求所有被ESLint处理的文件都必须被指定的TSConfig包含——不管文件后缀是.ts还是.js。
你的.eslintignore理论上应该让ESLint跳过检查.eslintrc.js,但可能存在两种情况导致失效:
- 编辑器的ESLint插件未正确读取
.eslintignore配置(比如缓存未更新); - 即使ignore生效,只要ESLint处理了该文件(比如手动打开文件触发编辑器检查),
parserOptions.project的类型检查逻辑依然会触发,因为它是基于parser层面的强制要求,而非ESLint的文件过滤规则。
解决方案
方案一:给JS文件关闭类型检查要求
在ESLint配置中添加overrides,单独给.js文件禁用parserOptions.project:
module.exports = { root: true, parser: '@typescript-eslint/parser', parserOptions: { tsconfigRootDir: __dirname, project: ['./tsconfig.json'], }, plugins: ['@typescript-eslint'], env: { es6: true, browser: true, }, extends: [ '@open-wc', 'eslint:recommended', 'plugin:import/recommended', 'prettier', ], rules: {}, // 新增overrides配置 overrides: [ { files: ["*.js"], parserOptions: { project: false, }, }, ], };
这个方案既保留了TS文件的类型检查,又避免JS文件触发TSConfig包含检查。
方案二:创建专门用于ESLint的TSConfig
新建tsconfig.eslint.json文件(和原tsconfig同目录),扩展原配置并包含ESLint配置文件:
{ "extends": "./tsconfig.json", "include": [ "**/*.ts", ".eslintrc.js" ] }
然后修改.eslintrc.js的parserOptions.project指向这个新配置:
parserOptions: { tsconfigRootDir: __dirname, project: ['./tsconfig.eslint.json'], },
这个方案让ESLint的类型检查范围包含JS配置文件,从根源上解决冲突。
额外排查:确保.eslintignore生效
如果以上方案后仍有问题,检查:
.eslintignore是否和.eslintrc.js在同一目录;- 重启编辑器或手动触发ESLint配置重载(比如VSCode中按
Ctrl+Shift+P选择"ESLint: Restart ESLint Server"); - 命令行运行
eslint --print-config .eslintrc.js,查看该文件是否被标记为忽略。
内容的提问来源于stack exchange,提问作者Dave Stein
相关产品推荐
相关产品推荐

