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

ben*_*inz 3 typescript

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

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

function onlyTakeFooKeys(key: keyof foo) {
  // do stuff with key
}
Run Code Online (Sandbox Code Playgroud)

并且编译器将强制执行onlyTakeFooKeys只能使用name或调用age.

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

some_operator foo; //=> string | number
Run Code Online (Sandbox Code Playgroud)

这目前是否可以实现?

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

jca*_*alz 5

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

type ValueOf<T> = T[keyof T]
Run Code Online (Sandbox Code Playgroud)

使用查找类型索引到Tkeyof T.在你的情况下,你可以做ValueOf<foo>生产string | number.

这几乎肯定已被提出并得到了回答; 我的搜索能力暂时让我失望.这个答案与这个答案重复,但是陈述的问题有点不同(因为它需要用该键的值类型来约束键).

希望有所帮助.祝好运.