昆仑增长 TypeScript 类型体操
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @kunlungrowth/typescript-advanced 技能,以协助进行 TypeScript 类型推导与重构。
技能介绍
为什么要和 any 与 as 彻底决裂
在多人协作或长生命周期的项目中,随着业务逻辑的膨胀,最初的类型定义往往会逐渐失效。为了快速通过编译,开发者很容易退化成大量使用 any 或类型断言 as。这看似解决了眼前的编译报错,实则抽干了 TypeScript 最核心的类型推导能力。当你需要重构核心模块时,编译器不再能为你提供精准的安全网,任何字段名的拼写错误或数据结构的变化都可能引发难以追踪的运行时灾难。
我们需要一种机制,让编译器不仅能检查类型,还能像“第一道防线”一样主动推导并约束代码逻辑,彻底告别因手动断言带来的不确定性。
核心能力与工作流步骤
这个技能通过一套严密的工作流,帮助你利用类型体操重新夺回编译器的控制权。
- 步骤1:精准定义问题。先理解需要表达的类型约束,而不是随手添加
as SomeType。 - 步骤2:核心类型工具应用。通过
extends约束泛型形状,利用infer从Promise等结构中提取内部类型,结合映射类型(Mapped Types)与模板字面量实现复杂的对象转换。 - 步骤3:实现常用工具类型。编写
DeepPartial或PathOf等通用工具,配合expectTypeOf进行严格的类型测试。 - 步骤4:渐进式消除不安全类型。使用
typeof、in或自定义 type guard 进行类型收窄,或引入zod等运行时校验库替代as。
适用边界与性能注意
高级类型并非万能药。它不适用于基础语法入门,也无法干预运行时的实际行为。
此外,过度使用递归类型会触发编译器的性能瓶颈。TypeScript 的递归深度限制约为 50,在编写复杂的映射类型时应尽早使用条件类型进行过滤,避免组合爆炸。对于公共 API,优先使用 interface 以获得声明合并和更优的编译速度。
使用场景
- 接手代码中 `any` 和 `as` 泛滥,需要重构并用泛型与类型收窄替代断言
- 设计可复用的工具库类型,要求编写 `DeepPartial` 与 `PathOf` 等推导工具
- 解析联合类型的 API 响应,需用条件类型与 `infer` 自动提取分支数据
- 公共 API 需要兼顾编译性能,希望合理使用 `interface` 与过滤映射类型
适合人员
- TS 工具库作者,需要提供灵活且精确的泛型类型供下游项目消费
- 业务重构工程师,希望降低重构风险并用类型系统消除现有 `any`
- 需要阅读 trpc、zod 等库源码的开发者,想理解其底层类型魔法
- 关注编译性能的架构师,需要评估递归深度与映射类型的复杂度