TypeScript:元组类型到对象类型

时间:2019-02-08 20:07:14

标签: typescript typescript-typings

考虑这样的元组:

type MyTuple = [A, B];

其中AB都有一个名为key的属性。例如,

interface A = {
  key: 'sandwiches'
}

interface B = {
  key: 'pasta'
}

我希望使用以下界面:

interface Result {
  sandwiches: A;
  pasta: B;
}

有没有办法动态地做到这一点?

我在想,如果可以实现,它可能看起来像这样:

type MapTuple<T> = {
  [K in keyof T]: T[K]["key"]
}

但这不起作用。

此问题是Typescript: object type to array type (tuple)

1 个答案:

答案 0 :(得分:6)

这将产生所需的效果。您需要映射元组的所有键属性,并为每个键提取元组成员:

type MyTuple = [A, B];

interface A {
  key: 'sandwiches'
}

interface B {
  key: 'pasta'
}


type MapTuple<T extends Array<{ key: string }>> = {
  [K in T[number]['key']]: Extract<T[number], { key : K}>
}

type R = MapTuple<MyTuple>
相关问题