用途
Type Safety Rules 是一套「以审查为导向」的规则集,目标是在 TypeScript 代码库中排查类型系统的侵蚀(type-system erosion)。它以审计清单的形式组织,共 20 条规则、7 个类别,并按照影响范围(blast radius)从高到低排序。该规则集被 type-safety-auditor 智能体用作审计清单,同时也可以脱离该智能体,在编写或加固 TypeScript 代码时单独使用。
规则分类(按优先级)
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | Any Erosion(any 侵蚀) | CRITICAL | any- |
| 2 | Unsound Casts(不健全的类型断言) | CRITICAL | cast- |
| 3 | Boundary Validation(边界校验) | CRITICAL | boundary- |
| 4 | Assertion Abuse(断言滥用) | HIGH | assert- |
| 5 | Compiler Configuration(编译器配置) | HIGH | config- |
| 6 | Exhaustiveness(穷尽性) | MEDIUM-HIGH | exhaust- |
| 7 | Generics Soundness(泛型健全性) | MEDIUM | generics- |
规则速查
1. Any Erosion(CRITICAL)
- any-explicit:将显式 any 替换为 unknown 加类型收窄。
- any-implicit-boundary:立即为 JSON.parse、response.json() 和 catch 的结果标注类型。
- any-generic-default:永远不要将类型参数的默认值设为 any。
2. Unsound Casts(CRITICAL)
- cast-as-unsound:改变形状的 as 断言应改用运行时检查。
- cast-double:as unknown as X 是对类型系统的绕过,应编写类型守卫或转换器。
- cast-const-assertion:使用 as const 做字面量收窄,而不是使用放宽的类型标注。
3. Boundary Validation(CRITICAL)
- boundary-http:在边界处用 schema 解析 HTTP 载荷。
- boundary-queue:在处理前校验队列和事件消息。
- boundary-storage:对存储读取(localStorage、文件、DB JSON)进行校验并加上版本。
- boundary-env:通过单一且经过校验的配置模块访问环境变量。
4. Assertion Abuse(HIGH)
- assert-non-null:! 需要有相邻的不变量说明,或改用快速失败检查。
- assert-ts-expect-error:使用带原因的 @ts-expect-error,绝不要用 @ts-ignore。
5. Compiler Configuration(HIGH)
- config-strict:"strict": true 是基线配置。
- config-unchecked-index:启用 noUncheckedIndexedAccess。
- config-exact-optional:启用 exactOptionalPropertyTypes。
- config-skiplibcheck:skipLibCheck 可以用来加速第三方类型,但绝不能用来掩盖第一方错误。
6. Exhaustiveness(MEDIUM-HIGH)
- exhaust-switch-never:可辨识联合的 default 分支要加上 never 断言。
- exhaust-satisfies-record:对完整的查找表使用 satisfies Record<K, V>。
7. Generics Soundness(MEDIUM)
- generics-constraint:在公开 API 上约束类型参数。
- generics-type-guards:类型谓词必须验证它所声称的整个结构。
如何使用
阅读 rules/ 目录下的各个规则文件,获取详细说明和代码示例。每个规则文件都包含简短说明、错误示例、正确示例,以及供评审者使用的检测提示。
适用场景
- 对既有 TypeScript 代码库进行类型安全审计。
- 在团队代码评审中作为类型相关问题的检查清单。
- 在编写新 TypeScript 代码时进行加固与自查。
- 配合 type-safety-auditor 智能体开展自动化类型审查。
限制
资料中未说明该规则集对具体 TypeScript 版本、构建工具或框架的依赖要求,也未提供规则的安装方式或自动化执行方式,相关内容暂未提供。