Function 参数类型为T和K的泛型函数,其中K是T和数组的键?
在typescript中,可以声明一个函数,该函数需要一个类型及其一个键作为参数:Function 参数类型为T和K的泛型函数,其中K是T和数组的键?,function,typescript,generics,Function,Typescript,Generics,在typescript中,可以声明一个函数,该函数需要一个类型及其一个键作为参数: function foo<T, K extends keyof T>(object: T, key: K) 问题: function lengthLogger<T, K /*extends keyof T and is array*/>(object: T, key: K){ console.log(object[key].length) } 是否有可能将泛型类型K扩展为
function foo<T, K extends keyof T>(object: T, key: K)
问题:
function lengthLogger<T, K /*extends keyof T and is array*/>(object: T, key: K){
console.log(object[key].length)
}
是否有可能将泛型类型K
扩展为一个数组?
(换句话说:K
必须是数组和T
类型的键)
示例用例:
function lengthLogger<T, K /*extends keyof T and is array*/>(object: T, key: K){
console.log(object[key].length)
}
函数长度记录器(对象:T,键:K){
console.log(对象[key].length)
}
有几种方法可以做到这一点。最好的方法是将T
声明为any[]的K
记录
function lengthLogger<T extends Record<K, any[]>, K extends keyof T>(object: T, key: K) {
console.log(object[key].length)
}
lengthLogger({
foo: "",
bar: ["", ""]
}, 'bar')
lengthLogger({
foo: "",
bar: ["", ""]
}, 'foo') // Error
@Truntle在大多数情况下它是最好的
type ExtractKeysOfType<T, TValue> = { [P in keyof T]: T[P] extends TValue ? P : TValue}[keyof T]
function lengthLogger<T , K extends ExtractKeysOfType<T, any[]>>(object: T, key: K) {
console.log((object as any)[key].length)
}
lengthLogger({
foo: "",
bar: ["", ""]
}, 'bar')
lengthLogger({
foo: "",
bar: ["", ""]
}, 'foo') // Error