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

TypeScript中如何修改扩展接口的属性类型并新增字段?

TypeScript 接口扩展的高效方案

不用新建重复属性的独立接口,TypeScript提供的类型工具可以组合出更便捷的扩展方式,完美适配你这种批量修改属性类型+新增字段的场景,而且能复用在多个类似需求中。

步骤1:定义通用类型工具

先封装两个可复用的类型工具,用来批量处理NullProp类型的转换:

type NullProp<Q> = Q | null | undefined;

// 将NullProp<T>转换为T(去除null/undefined)
type NonNullify<T> = T extends NullProp<infer U> ? U : T;

// 批量将对象中指定属性转为非空类型
type NonNullifyKeys<Obj, Keys extends keyof Obj> = Omit<Obj, Keys> & {
  [K in Keys]: NonNullify<Obj[K]>;
};

步骤2:生成目标接口

利用上面的工具,结合原有Request接口,快速生成DataRequest:

interface Request {
  Id: NullProp<number>,
  Name: NullProp<string>,
  Code: NullProp<string>,
  Type: NullProp<string>,
  ValueType: NullProp<string>
  // 其他原有属性
}

// 先批量修改指定属性为非空,再合并新增字段
type DataRequest = NonNullifyKeys<Request, 'Id' | 'Name' | 'Code' | 'Type' | 'ValueType'> & {
  DataRequestId: number,
  DataRequestType: string,
  DataValueType: NullProp<string>
};

进阶:全量转换属性类型

如果某个场景需要把原有接口的所有NullProp属性都转为非空,可以再封装一个全量转换的工具:

// 将对象中所有NullProp类型的属性转为非空
type NonNullifyAll<Obj> = {
  [K in keyof Obj]: NonNullify<Obj[K]>;
};

// 用全量转换生成DataRequest的写法
type DataRequest = NonNullifyAll<Request> & {
  DataRequestId: number,
  DataRequestType: string,
  DataValueType: NullProp<string>
};

方案优势

  • 避免重复编写大量属性定义,只需要指定要修改的属性(或全量转换)
  • 类型工具可以在多个接口扩展场景中复用,减少维护成本
  • 保持代码的简洁性和一致性,符合DRY原则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:33:35