如何合并来自对象并集的属性

时间:2019-04-27 07:40:48

标签: typescript

我可以通过type UnionKeys<T> = { [Key in keyof T]: Key }[keyof T]

来获得一个联合的所有键
type MyUnion = {x: 'a', y: 'b'} |  {x: 'aa', z: 'c'}
type T1 = UnionKeys<MyUnion> // 'x' | 'y' | 'z'

如何获得工会的合并类型?

type MergedUnion<T> = ?????
type T2 = MergedUnion<MyUnion> // `{x: 'a' | 'aa', y: 'b', z: 'c'}`

1 个答案:

答案 0 :(得分:2)

这可以做到。我们映射到UnionKeys(我使用了不同的定义,使用了分布式条件类型),并且使用了另一个分布式条件类型来提取特定键可以具有的所有值的并集:

type MyUnion = {x: 'a', y: 'b'} |  {x: 'aa', z: 'c'}
type UnionKeys<T> = T extends unknown ? keyof T : never;
type UnionValues<T, K extends PropertyKey> = T extends Record<K, infer U> ? U: never;
type MergedUnion<T> = { [P in UnionKeys<T>]: UnionValues<T, P> }