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

编写TypeScript类型工具Converter为联合类型添加指定属性

实现为TypeScript联合类型成员添加指定属性的类型工具

没问题,这个需求可以通过TypeScript的分布式类型特性轻松实现。这里有两种简洁的写法来定义你要的Converter泛型:

写法一:利用映射类型

type Converter<Union extends object, PropName extends string, PropValue> = {
  [T in Union]: T & { [K in PropName]: PropValue }
}[Union];

写法二:利用分布式条件类型(更简洁)

type Converter<Union extends object, PropName extends string, PropValue> = 
  Union extends infer T ? T & { [K in PropName]: PropValue } : never;

用法示例

把你的FormerActions类型代入测试:

type FormerActions = | { type: "ACTION_A"; payload: string } | { type: "ACTION_B"; payload: number }

type ModifiedActions = Converter<FormerActions, "group", "DOMAIN">;

生成的ModifiedActions类型完全符合你的预期:

type ModifiedActions = 
  | { group: 'DOMAIN'; type: "ACTION_A"; payload: string } 
  | { group: 'DOMAIN'; type: "ACTION_B"; payload: number }

原理说明

两种写法本质上都利用了TypeScript的分布式类型特性:当泛型参数是联合类型时,TypeScript会自动将逻辑分发到联合的每个成员上处理:

  • 对联合中的每个成员类型T,我们通过交叉类型T & { [K in PropName]: PropValue },把指定的属性(固定值)合并到原类型上
  • 最后重新组合成新的联合类型,就是我们要的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:50:56