假设我有以下函数声明:
function foo<T extends {}>(bar: Array<{ key: keyof T, value: any, otherParam: string}>): T[]
我有这个界面:
interface C {
d: string
e: number
}
当我这样调用foo时:
foo<C>([{key: 'd', value: 'myValue', otherParam: 'other'}, {key: 'e', value: 100, otherParam: 'other'}])
我想推断第二个参数value
的类型,并摆脱那可怕的any
。
我该怎么做?
谢谢!
答案 0 :(得分:1)
使用mapped types将T
转换为所需的形状。
type Bar<T> = {
[P in keyof T]: { key: P, value: T[P], otherParam: string }
}[keyof T];
完整解决方案:
type Bar<T> = {
[P in keyof T]: { key: P, value: T[P], otherParam: string }
}[keyof T];
declare function foo<T extends object>(bar: Bar<T>[]): T[]
interface C {
d: string
e: number
}
foo<C>([{key: 'd', value: 'string', otherParam: 'other'}, {key: 'e', value: 100, otherParam: 'other'}])