允许泛型仅是对象的数组键

时间:2019-03-11 21:01:01

标签: typescript

我正在尝试编写一个工厂函数,该函数接受对象中的键以进行过滤。这是相关的TS:

function getNodesOfTypeFactory<
  K extends keyof T,
  T extends { [key: K]: any[] },
>(aryKey: K): (node: T) => T[K] {

简而言之,我想告诉我,我有一个类型为T的对象,该对象的类型为K的键是一个数组。我在抱怨key必须是string | number类型。有什么想法吗?

另一个失败的尝试:

function foo<
    T,
    K extends keyof T,
    >(key: K, node: T extends { [key]: any[] }) {
// -------------------------------------------^ '?' expected

1 个答案:

答案 0 :(得分:1)

要使用K之类的键类型,您需要使用映射类型的语法:

function getNodesOfTypeFactory<
  K extends keyof T,
  T extends { [key in K]: any[] },
>(aryKey: K): (node: T) => T[K] { ...

注意用[key in K]代替[key: K]