打字稿:将相似对象的联合转换为对象类型

时间:2020-12-19 23:52:22

标签: javascript typescript

如何使用 TypeScript 类型将相似对象的并集转换为对象类型?

输入

type I = {
  key: 'foo',
  value: Foo,
} | {
  key: 'bar',
  value: Bar,
};

输出

type O = {
  foo: Foo,
  bar: Bar,
};

我不确定这是否可能。但谁知道呢? 请注意,该任务与 that 不重复。

1 个答案:

答案 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;
} */

Playground link to code