You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定义联合类型中可后续扩展属性的空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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:47:20