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, ?>
的類型?