如何定义联合类型中可后续扩展属性的空Fern类型?
优化联合结果类型的扩展性方案
你的初始类型定义本身已经能满足“先完成类型定义、后续灵活添加SuccessType属性”的需求,但可以从以下几个方向优化,让后续扩展更顺畅:
给SuccessType添加固定类型标识
即使暂时没有业务属性,也可以给SuccessType和FailureType都加上固定的type字段,后续判断结果类型时更清晰,也避免后续扩展时出现类型混淆:types: SuccessType: properties: type: const: "success" optional: false FailureType: properties: type: const: "failure" optional: false reason: str ResultType: union: success: SuccessType failure: FailureType后续给SuccessType添加业务属性时,这个
type标识可以保留,类型判断逻辑完全不用修改。设置SuccessType为开放结构
如果你的类型系统支持additionalProperties配置,可以将SuccessType定义为允许任意额外属性的结构,这样后续添加新属性时,不需要修改基础类型定义,直接在使用时扩展即可:types: SuccessType: properties: {} additionalProperties: true FailureType: properties: reason: str ResultType: union: success: SuccessType failure: FailureType采用继承式结构预留扩展空间
如果后续可能需要针对不同场景定义多种成功结果类型,可以先定义一个空的基础成功类型,让当前的SuccessType继承它,后续扩展子类型时更加有条理:types: SuccessBaseType: {} SuccessType: inherits: SuccessBaseType FailureType: properties: reason: str ResultType: union: success: SuccessType failure: FailureType之后可以基于
SuccessBaseType创建不同的成功子类型,而ResultType的定义无需改动。
总的来说,你的初始写法已经达标,上面的优化方案可以根据你使用的类型系统支持的特性,以及后续的扩展需求来选择。
内容的提问来源于stack exchange,提问作者vanhooser
相关产品推荐
相关产品推荐

