@typescript-eslint/no-unused-vars规则varsIgnorePattern正则失效问题
解决@typescript-eslint/no-unused-vars对默认导出类的误报问题
问题场景
启用@typescript-eslint/no-unused-vars规则时,以下写法会触发"MyClass is defined but never used"警告:
export default class MyClass {}
但拆分声明和导出的写法却能正常通过检查:
class MyClass {} export default MyClass
尝试配置规则时,直接指定类名的正则有效:
"@typescript-eslint/no-unused-vars": [ "warn", { "varsIgnorePattern": "MyClass" } ]
但使用正向后顾正则(?<=export default class\s)\w+时,警告依然出现。
原因分析
varsIgnorePattern的作用是匹配标识符的名称本身,而非完整的代码上下文。规则在检查时,只会把类名(比如"MyClass")传入该正则进行匹配,不会传入整个"export default class MyClass"代码行。你的正向后顾正则依赖前面的上下文,自然无法匹配到单独的类名字符串,所以不生效。
解决方案
方案1:匹配所有默认导出类的名称(简单但宽泛)
如果所有默认导出的类都需要忽略,可以直接用匹配任意标识符的正则:
"@typescript-eslint/no-unused-vars": [ "warn", { "varsIgnorePattern": "^\\w+$" } ]
注意:这个配置会忽略所有未使用的变量/类名,可能会误判其他场景,谨慎使用。
方案2:通过AST选择器精准匹配默认导出类(推荐)
使用规则的ignored配置项,结合AST选择器直接定位默认导出的类声明:
"@typescript-eslint/no-unused-vars": [ "warn", { "ignored": [ { "selector": "ClassDeclaration[exportKind='default']", "types": ["Identifier"] } ] } ]
该配置通过AST选择器ClassDeclaration[exportKind='default']匹配所有默认导出的类声明,然后忽略其标识符(类名)的未使用警告,精准解决你的场景问题。
内容的提问来源于stack exchange,提问作者Alexei Delezhov
相关产品推荐
相关产品推荐

