如何将对象的联合转换为具有对象值的普通联合。一个例子:
type Foo = {};
type Bar = {};
type Baz = {};
type Qux = {};
type Input = {
foo: Foo,
bar: Bar,
} | {
bar: Bar,
baz: Baz,
} | {
qux: Qux,
};
type Expected = Foo | Bar | Baz | Qux;
注意联合对象的键可能会相交(例如bar
)。希望解决方案能让我解开嵌套的类型。
答案 0 :(得分:2)
您想要获取类似 a ValueOf<T>
type(即 T[keyof T]
)的内容,并将其分发给 T
的工会成员,以便如果 {{1例如,}} 是 T
,那么 A | B | C
是 Transform<T>
。您可以使用 distributive conditional type 来获得该行为:
A[keyof A] | B[keyof B] | C[keyof C]
让我们测试一下:
type Transform<T> = T extends any ? T[keyof T] : never;
看起来不错。