获取接口成员类型的联合类型

时间:2018-04-20 18:12:26

标签: typescript

在TypeScript中,目前可以获取接口的所有“键”的联合类型,如:

interface foo {
  name: string;
  age: number;
}

function onlyTakeFooKeys(key: keyof foo) {
  // do stuff with key
}

编译器将强制onlyTakeFooKeys只能使用nameage进行调用。

我的用例是我需要获得所有类型的接口/对象成员的联合类型。在给定的接口foo示例中,我期待这样的事情:

some_operator foo; //=> string | number

这目前是否可以实现?

假设接口具有任意数量的成员,这使得难以进行硬编码。这需要在编译时完成。

1 个答案:

答案 0 :(得分:5)

您可以像这样定义ValueOf<T>

type ValueOf<T> = T[keyof T]

使用lookup types使用T索引keyof T。在您的情况下,您可以ValueOf<foo>生成string | number

之前几乎可以肯定地得到了回答;我的搜索能力暂时让我失望。这个答案是this answer的副本,但是陈述的问题有点不同(因为它需要用该键的值类型约束键)。

希望有所帮助。祝你好运。