首页 文章

获取接口的联合类型's member' s类型

提问于
浏览
3

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

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

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

并且编译器将强制只能使用 nameage 调用 onlyTakeFooKeys .

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

some_operator foo; //=> string | number

这目前是否可以实现?

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

1 回答

  • 5

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

    type ValueOf<T> = T[keyof T]
    

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

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

    希望有所帮助 . 祝好运 .

相关问题