用途
本技能为编写高级 TypeScript 定义规则、约定与架构决策,刻意保持有主见,用于防止常见的类型层面缺陷,并推行能产出安全、可维护代码的模式。它关注的是何时、为何以及如何正确使用高级类型特性,而非 TypeScript 特性的详细 API 文档(后者应查阅其他文档工具或网络搜索)。
主要能力
类型安全哲学
- any vs unknown vs never:新代码中永不使用 any;外部边界(JSON、用户数据)使用 unknown 并在操作前收窄;never 用于穷尽检查与不可达代码。
- 优先使用联合类型而非枚举:数字枚举在结构上可赋值给 number(如 go(42) 不报错),字符串字面量联合是默认选择,除非需要反向映射。
- interface 与 type 的决策表:对象形状与类契约用 interface(支持声明合并、错误信息更好);联合、交叉、映射/条件类型用 type;第三方增强用 interface;公共 API 类型用 interface;内部计算类型用 type。
可辨识联合与穷尽检查
- 使用 never 穷尽模式:在 switch/if-else 链的 default 分支赋值给 never,新增变体时产生编译错误。
- 规则:判别属性必须是字面量类型;判别属性名在各成员间保持一致;避免可选判别属性。
品牌类型(Branded Types)
- TypeScript 是结构化的,UserId 与 OrderId 默认可互换;品牌类型在类型层面打破这一点且零运行时开销。
- 推荐模式:unique symbol 品牌,构造函数作为唯一信任边界进行校验。
- 适用场景:ID、单位(Meters/Feet/USD/EUR)、已验证字符串(Email/URL/Slug)、不透明令牌(JWTToken/APIKey)。
- type-fest 替代:使用 Tagged<T, Tag> 支持多标签组合与元数据。
现代推断工具
- satisfies(TS 4.9+):校验结构同时保留具体推断,适合配置校验并需要具体值自动补全的场景。
- const 类型参数(TS 5.0+):在调用点保留字面量类型,适合构建注册表、配置工厂等泛型。
- NoInfer<T>(TS 5.4+):阻止某参数参与类型推断,适合多参数共享类型参数、其中一个应受其他参数约束的场景。
type-fest
- 提供 200+ 工具类型,零运行时成本(仅类型)。编写自定义工具前应先检查 type-fest。
- 内置与 type-fest 决策表涵盖:按 key 可选/必填、深层 Partial/Readonly、Merge、Simplify、LiteralUnion、至少/恰好一个约束、品牌类型、JSON 往返类型、严格 Omit(Except)、深层点路径访问、精确对象、按值类型 Pick/Omit、package.json/tsconfig 类型、键名大小写转换等。
- 最常用工具:Simplify<T> 展平交叉类型;Merge<A, B> 干净覆盖冲突键;LiteralUnion 保留自动补全;SetRequired/SetOptional 切换特定键;Jsonify<T> 建模 JSON 往返。
常见陷阱
- any 静默泄漏;多余属性检查仅对字面量生效;never 上的分布式条件类型返回 never(需用元组包裹);Omit 不检查键存在性;let 导致类型拓宽;交叉类型冲突键变为 never;数字枚举可赋值任意数字;interface 意外合并;isolatedModules 下的 const enum;数组参数忘记 readonly;结构化子类型函数参数的双变性;重复造 type-fest 轮子。
使用方式
本技能以规则、约定与决策表的形式提供指导。处理特定模式时,阅读相应参考文件:
- references/conditional-types.md:infer、分布式条件类型、用 extends 约束
- references/mapped-types.md:键重映射、过滤、模板字面量键操作
- references/template-literals.md:类型层面的字符串操作、模式匹配、解析
- references/module-augmentation.md:声明合并、扩展第三方类型、全局作用域
- references/type-fest.md:按类别划分的完整 type-fest 工具目录与用法示例
适用场景
适用于实现复杂 TypeScript 类型、设计类型安全的 API、构建配置工厂与注册表、需要名义化类型安全(ID、单位、令牌)、以及希望避免常见类型层面缺陷的项目。
限制
本技能不提供 TypeScript 特性的详细 API 文档,需配合文档查询或网络搜索使用。资料未提供安装命令、收费信息、平台支持或具体使用步骤。