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

如何从对象联合类型中获取指定属性的取值类型

实现获取联合类型指定属性的取值类型

你可以利用TypeScript的分布式条件类型来实现ValueOfObject,具体代码如下:

type ValueOfObject<T, K extends PropertyKey> = T extends T 
  ? K extends keyof T 
    ? T[K] 
    : undefined 
  : never;

验证你的示例

结合你定义的类型:

interface A {
  a: number
  b: string
  c: string
}

interface B {
  a: string
  b: string
}

type C = A | B

使用ValueOfObject的结果完全符合预期:

  • type aValues = ValueOfObject<C, 'a'> → number | string
  • type bValue = ValueOfObject<C, 'b'> → string
  • type cValues = ValueOfObject<C, 'c'> → string | undefined

原理说明

  1. 分布式条件类型:T extends T会触发TypeScript的分布式特性,把联合类型T拆分成单个成员(这里就是A和B)分别处理。
  2. 属性存在性检查:对每个拆分后的成员,判断K是否属于该成员的键(K extends keyof T):
    • 如果存在,直接取该成员的K属性类型T[K];
    • 如果不存在,返回undefined(因为联合类型中部分成员没有该属性,访问时可能得到undefined)。
  3. 自动联合结果:所有成员的处理结果会自动合并成一个联合类型,就是最终的属性取值类型。

你之前实现的KeysOfUnion也是利用了同样的分布式条件类型思路,只是这里进一步扩展到了属性值的获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:50:29