该技能适用于设计类型、审查函数签名,或用任意静态类型语言编写代码时。核心主张是让编译器拒绝不可能的状态、不匹配的原始类型和未处理的取值分支,优先通过定义消除错误与特殊情况,而不是增加处理分支。TypeScript 语法可参考 typescript-best-practices 技能。
主要能力与用法:一、让非法状态无法表示。用和类型(可辨识联合、带载荷的枚举、密封类)建模变体,而非一堆互相矛盾也能编译的可选字段;若一段注释在解释字段组合何时有效,就应拆成和类型。二、类型是构造而非限制。从想要的取值自底向上构造类型,如非空列表是头加尾,有效时间区间是起点加时长。三、为语义化原始类型做品牌化。UserId 与 OrderId 底层都是字符串但不可互换,各给独立类型(如 TypeScript 的品牌交叉类型或他处的 newtype),在创建时校验一次,下游信任类型。四、外部数据在被解析前是无类型的。RPC 载荷、JSON、IPC 消息、CLI 参数、配置文件、环境变量、数据库行,都应在边界处有解析函数将其转为类型化模型。五、不要欺骗类型系统。强制转换、不安全强制与绕过编译器的断言函数是潜在运行时崩溃;编译器无法证明的事应去证明,或承认该转换有风险。六、穷尽匹配由编译器负责:和类型新增变体而未处理时必须编译失败。七、从权威模式派生类型,如 protobuf、OpenAPI、GraphQL、数据库迁移或设计令牌文件。八、仅在出现部分性时加强类型,把运行时断言、空值检查或“不该发生”抛错上推到类型中,然后停止;优先全函数,例如空列表求和为 0 故接受普通列表,取头无答案故要求非空列表。
限制:该技能为原则性指导,未提供具体命令、安装方式、收费或平台信息。