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

如何为自动生成的嵌套TypeScript接口添加UI所需属性?

最优解决方案:递归类型映射+纯数据转换函数

针对你的场景,推荐结合TypeScript的递归类型映射工具和纯数据转换函数,既不修改自动生成的原接口,也避免冗余定义,同时保证类型安全:

1. 用递归类型映射自动生成适配UI的嵌套类型

不用手动编写AForUI、BForUI这类冗余接口,通过TypeScript的类型工具递归将所有嵌套的C类型替换为CForUI:

// 递归替换类型中的C为CForUI,处理嵌套对象和数组
type ReplaceCWithCForUI<T> = 
  T extends C ? CForUI :
  T extends Array<infer U> ? Array<ReplaceCWithCForUI<U>> :
  T extends object ? { [K in keyof T]: ReplaceCWithCForUI<T[K]> } :
  T;

// 自动生成适配UI的A类型
type AForUI = ReplaceCWithCForUI<A>;

这个类型工具会自动遍历原A、B的所有属性,把所有C类型(包括数组里的C)替换成CForUI,完全匹配原结构,不会出现阻抗不匹配问题。

2. 编写纯数据转换函数,不修改原数据

写一个纯函数将API返回的A类型数据转换为AForUI类型,返回新对象而非修改原数据:

function convertToAForUI(rawData: A): AForUI {
  return {
    ...rawData,
    arrayOfB: rawData.arrayOfB.map(b => ({
      ...b,
      arrayOfC: b.arrayOfC.map(c => ({
        ...c,
        // 根据需求生成label,这里示例用name作为label,可自定义逻辑
        label: c.name
      }))
    }))
  };
}

使用时只需在给UI库传数据前调用该函数,原API数据保持不变,也不会修改自动生成的接口定义。

方案优势

  • 无需手动维护冗余的UI专用嵌套接口,类型自动同步原结构变化
  • 不修改自动生成的原接口,避免后续API更新时的冲突
  • 纯转换函数不污染原数据,保证数据来源的纯净性
  • 完全符合TypeScript类型校验,避免空值检查或类型断言的不安全问题

内容的提问来源于stack exchange,提问作者Kazumasa Harada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:20:46