0
的函数输入一个嵌套通用对象,以及输出平板状物体等如下:
interface Deep<T> {
p1: T;
p2: T;
}
type Nested<T> = {
[P in keyof T]: Deep<any>;
}
type Flat<T, ?> = {
[P in keyof T]: T[P]?;
}
function flat<T extends Nested<T>>(input: T, p: keyof Deep<any>): Flat<T, ?> {
const put: any = {}
for (let k in input)
put[k] = input[k][p]
}
const foo = flat({
name: { p1: 'name', p2: 'name' },
{ fn: { p1:() => 0, p2:() => 1 }
})
在这种情况下,输入是具有不同Deep
类型嵌套对象,希望打字稿可以暗示foo.name
的类型为string
,foo.fn
的类型为() => number
。
我该如何声明Flat<T, ?>
的类型?