我试图创建一个自定义类型,该类型将通用参数T的所有类型替换为string[]
,但保留所有属性名称甚至嵌套。
预期行为:没有错误
interface Bar {
lat: string,
lng: string
}
interface Foo {
id: string,
bar: Bar
}
export type PartialDeepKeyOf<T> = { [id in keyof T]: string[] }
const baz: PartialDeepKeyOf<Foo> = {
id: ['a','b'],
bar: {
lat: ['a','b'],
lng: ['a','b'],
}
}
实际行为:
输入'{lat:string []; lng:字符串[]; }'不可分配给type 'string []'
答案 0 :(得分:1)
您需要递归类型遍历
type PartialDeepKeyOf<T> = {
[P in keyof T]: T[P] extends string
? string[]
: PartialDeepKeyOf<T[P]>
};