用途:这是一个 TypeScript 设计指导技能,用于决定何时添加可选属性(?),提示可选属性会带来不确定性,应尽量用必填属性、默认值或显式联合类型替代。
主要能力:给出判断原则——仅当“缺失”本身有意义时才用可选属性;可选属性在使用时都需类型收窄;n 个可选属性会产生 2^n 种状态,可能包含大量非法组合。提供三种替代方案:必填属性加构造时默认值;拆分为多个接口并用联合类型组合;使用带 type 标签的可辨识联合。还建议把相关可选属性分组为单个可选对象,避免“上帝对象”式接口,并列出预警信号(接口上超过 3-4 个可选属性、必须一起检查的可选属性、需要注释说明依赖关系、反复使用 ?. 链)。
使用方式:在向已有类型添加新属性、设计含可选字段的接口、从 JavaScript 迁移类型、或在必填与可选之间取舍时参考。资料未提供安装命令或具体调用步骤。
适用场景:TypeScript 接口与类型设计、API 数据结构建模、旧代码的类型演进。
限制:资料中示例的 2^n 状态与“每个可选属性使复杂度翻倍”是经验性说明;向后兼容场景仍可能合理使用可选属性,但建议考虑为类型做版本化。参考自《Effective TypeScript》第 37 条,作者 Dan Vanderkam。收费、价格、平台支持等事实暂未提供。