如何使用 TypeScript 类型将相似对象的并集转换为对象类型?
type I = {
key: 'foo',
value: Foo,
} | {
key: 'bar',
value: Bar,
};
type O = {
foo: Foo,
bar: Bar,
};
我不确定这是否可能。但谁知道呢? 请注意,该任务与 that 不重复。
答案 0 :(得分:3)
在 TypeScript 4.1 中,这是一个简单的 mapped type with key remapping。您可以迭代 T
union 的每个成员 I
(它是联合,而不是交集)和 look up 键/值类型:T['key']
用于键和值的 T['value']
。像这样:
type O = { [T in I as T['key']]: T['value'] };
/* type O = {
foo: Foo;
bar: Bar;
} */