配置@typescript-eslint/ban-types实现默认报错自定义规则警告
问题原因
@typescript-eslint/ban-types的报错级别是规则全局生效的,配置数组的第一个参数会统一控制所有命中规则的提示等级,规则本身不支持给单个禁止类型单独设级别。你之前把全局级别设为warn再开extendDefaults,默认禁止的类型当然也会全部变成警告,达不到预期效果。
实现方法
拆分两条独立规则就能实现分级提示,不需要装额外插件:
- 用
@typescript-eslint/ban-types做默认类型的error级检测:规则等级设为error,开extendDefaults: true,types字段里不要加自定义的禁止类型,这样String、Object这类默认禁的类型用了就会正常抛错。 - 用ESLint内置的
no-restricted-syntax做自定义类型的warn级检测:规则等级设为warn,通过AST选择器匹配类型位置的UntypedFormGroup引用,配上自定义提示就行,和前一条规则互不干扰。
完整配置示例:
{ "rules": { "@typescript-eslint/ban-types": [ "error", { "extendDefaults": true } ], "no-restricted-syntax": [ "warn", { "selector": "TSTypeReference[typeName.name='UntypedFormGroup']", "message": "Please use FormGroup which is a generic and helps you write better code." } ] } }
说明:上面用的
TSTypeReference选择器只会匹配类型标注、泛型参数等类型位置的UntypedFormGroup引用,不会误判值位置的同名变量、函数调用,常规场景下精度足够。如果要处理类型重命名、命名空间嵌套引用这类复杂场景,按需调整AST选择器即可。
内容的提问来源于stack exchange,提问作者sandrooco
相关产品推荐
相关产品推荐

