SuperAPI AI 工具集

unify-types

通用与其它

查看项目

更新于 10-16 06:45

技能介绍

用途:这是一条 TypeScript 类型设计技能,用于在相似类型只有细微差别、联合类型变得复杂、或需要在“建模差异”与“统一类型”之间做选择时提供指导。核心主张是:除非差异是根本性的,否则应统一类型,小差异可在运行时处理。

主要能力:识别“并行类型”坏味道,例如两个接口仅差一两个属性、联合类型大部分相同、为变体考虑单独类型、类型关系过于复杂。给出统一方案:把差异属性合并为带字面量联合的字段(如 vocalizationType: 'bark' | 'meow'),从而无需在每个函数中做类型收窄。也介绍折中方案——标签联合(tagged union):公共部分抽为基接口,差异部分用 type 字段区分,公共操作无需收窄,类型特有操作显式判断。

使用方式:在定义新类型前先自问:需要类型特有行为的频率高吗?差异是结构性的还是语义性的?统一是否会丢失重要类型安全?并做成本收益分析。资料给出的判断规则:很少需要特有行为则统一,经常需要则分开;结构相同仅含义不同可考虑统一,结构不同则保持分开;统一会丢失关键类型安全则保持分开。

适用场景:API 响应(成功/错误响应)、UI 事件(click/key/scroll)等大部分字段共享、仅少数细节不同的建模场景。

限制与例外:当类型行为根本不同(如 File 与 Directory 的操作完全不同)或基数/结构不同(单个结果与多个结果)时应保持分开,强行统一会丢失类型安全。资料还提醒避免“以后可能分叉”的 YAGNI 式借口,真正分叉时再重构。

来源:基于 Dan Vanderkam《Effective TypeScript》第 39 条。具体安装与调用方式暂未提供。