【问题标题】:Typescript: Convert union of similar objects to object type打字稿:将相似对象的联合转换为对象类型
【发布时间】:2020-12-19 23:52:22
【问题描述】:

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

输入

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

输出

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

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

【问题讨论】:

  • 那不是十字路口。
  • 不清楚从“输入”到“输出”的算法是什么,除非你有一个类型恰好是一堆类型的联合,其关键属性为 type各种类型的字符串和值属性。你将如何使用这个输出?您想要一个从I 生成O 的表达式吗?这对你有什么帮助? O 在你的代码中输入并不难——你在上面做了。所以,是的,看看你是否可以改进或澄清这个问题,我会说。

标签: javascript typescript


【解决方案1】:

在 TypeScript 4.1 中,这是一个简单的 mapped type with key remapping。您可以遍历 I union 的每个成员 T(它是联合,而不是交集)和 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2018-10-10
    • 2021-07-24
    • 2021-06-03
    • 2020-11-21
    • 2018-09-15
    相关资源
    最近更新 更多