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

如何将提取出的类型合并回原区分联合类型并覆盖指定分支

替换联合类型指定分支并保留其他分支的TypeScript实现

你可以通过 Exclude 工具类型先移除原联合类型A中需要被覆盖的分支,再和类型B合并,就能得到目标类型:

type A = { type: 'x', foo: boolean } | { type: 'y', bar: string }
type B = Extract<A, { type: 'x' }> & { baz: number }

// 生成新类型:用B替换A中type为'x'的分支,保留type为'y'的分支
type NewType = B | Exclude<A, { type: 'x' }>

验证这个类型的有效性:

  • 允许创建type为'x'且包含foo、baz的对象:
const validX: NewType = {
  type: 'x',
  foo: false,
  baz: 3
}
  • 保留了type为'y'的分支的有效性:
const validY: NewType = {
  type: 'y',
  bar: "hmm"
}
  • 不符合分支规则的对象会被TypeScript报错,比如缺少baz的type='x'对象:
// 报错:缺少属性'baz'
const invalidX: NewType = {
  type: 'x',
  foo: false
}

原理说明:

  • Exclude<A, { type: 'x' }> 会从联合类型A中排除所有匹配{ type: 'x' }的分支,仅保留{ type: 'y', bar: string }
  • 将该结果与B合并,即可实现用B覆盖原A中type='x'分支的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:27:09