ESLint Flat Config(TypeScript)异常扫描未配置文件问题求助
ESLint扫描未配置的built目录文件导致规则报错问题
问题场景
我在使用ESLint搭配TypeScript时,编写了如下eslint.config.mjs配置文件:
import importPlugin from "eslint-plugin-import"; import js from "@eslint/js"; import ts from 'typescript-eslint'; export default ts.config({ files: ["src/**/*.ts"], extends: [ js.configs.recommended, ...ts.configs.recommended, importPlugin.flatConfigs.recommended, importPlugin.flatConfigs.typescript, ], languageOptions: { ecmaVersion: 5, sourceType: "script", parserOptions: { tsconfigRootDir: ".", project: ["./tsconfig.json"], }, }, rules: {/* 此处省略自定义规则 */} });
执行eslint .命令后出现如下错误:
<PROJECT-ROOT>/built/index.js <row>:<col> error Definition for rule '@typescript-eslint/no-unnecessary-condition' was not found @typescript-eslint/no-unnecessary-condition <row>:<col> warning Unused eslint-disable directive (no problems were reported from 'no-constant-condition') (and non-problematic warnings for src/**/*.ts)
明明配置了files: ["src/**/*.ts"],ESLint却还是扫描了./built/index.js文件,导致TypeScript专属规则在JS文件上报错。尝试添加ignores: ["built/"]、"built/*"等多种忽略配置均无效。
问题原因
ESLint扁平配置中,extends引入的配置(比如js.configs.recommended)自带默认的文件匹配规则,会匹配所有.js文件——这就导致即使主配置指定了只扫描src/**/*.ts,扩展的JS规则集仍会触发对built/index.js的扫描。而该文件未使用TypeScript解析器,自然找不到@typescript-eslint/xxx这类规则,从而报错。
解决方案
将配置拆分为数组形式,把全局忽略规则、TypeScript文件规则、JS文件规则(如果需要)分开定义,确保规则只会应用到对应类型的文件上:
import importPlugin from "eslint-plugin-import"; import js from "@eslint/js"; import ts from 'typescript-eslint'; export default [ // 全局忽略规则,放在最前面优先生效 { ignores: ["built/**/*"] }, // 仅针对TypeScript文件的配置 { files: ["src/**/*.ts"], extends: [ js.configs.recommended, ...ts.configs.recommended, importPlugin.flatConfigs.recommended, importPlugin.flatConfigs.typescript, ], languageOptions: { ecmaVersion: 5, sourceType: "script", parserOptions: { tsconfigRootDir: ".", project: ["./tsconfig.json"], }, }, rules: {/* 自定义TypeScript规则 */} }, // 如果有需要扫描的JS文件,单独配置(不引入TypeScript规则) { files: ["src/**/*.js"], extends: [ js.configs.recommended, importPlugin.flatConfigs.recommended, ], languageOptions: { ecmaVersion: 5, sourceType: "script", }, rules: {/* 自定义JS规则 */} } ];
关键说明
- 全局忽略优先:把
ignores作为独立的配置项放在数组最前面,确保所有后续配置都会遵循该忽略规则,不会扫描built目录下的任何文件。 - 规则与文件类型绑定:将TypeScript相关规则仅应用在
.ts文件上,JS文件单独配置规则集,避免跨类型文件应用不兼容的规则。
内容的提问来源于stack exchange,提问作者Fine Archs
相关产品推荐
相关产品推荐

