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

如何创建自定义Utility Type为任意对象类型新增额外字段?

实现WithAge工具类型的方案

你要的效果可以通过 TypeScript 的交叉类型实现,核心逻辑是把传入的原始类型和包含age字段的额外类型做合并,基础实现代码如下:

type WithAge<T> = T & { age: number }

这里的&是交叉类型运算符,会同时保留泛型T的所有原有字段,再叠加number类型的age字段,完全匹配你给出的用法示例。

如果需要更高的灵活度,可以做两个方向的扩展:

  • 支持自定义age字段的类型,默认保留number类型:
// 第二个泛型参数可以指定age的类型,不传默认是number
type WithAge<T, AgeType = number> = T & { age: AgeType }

// 示例:age是字符串类型的场景
const person: WithAge<Person, string> = { name: "Foo", age: "25" }
  • 封装成通用的扩展字段工具类型,支持一次性新增任意多个字段:
type Extend<T, ExtendFields> = T & ExtendFields

// 示例:同时新增age和height两个字段
const person: Extend<Person, { age: number, height: number }> = { name: "Foo", age: 123, height: 180 }

注意事项

  • 如果原始类型T本身已经存在age字段,交叉后最终的age类型会是两个类型的交集,如果类型不兼容会得到never类型,使用时要避免字段重名冲突。
  • 该实现同时支持interface和type定义的类型作为入参,不需要额外做兼容处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 16:54:03