我正在尝试编写一个工厂函数,该函数接受对象中的键以进行过滤。这是相关的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
答案 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]
。