打字稿具有相同的键,但嵌套的类型不同(keyof但嵌套)

时间:2020-07-27 08:31:06

标签: javascript typescript

我试图创建一个自定义类型,该类型将通用参数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 []'

1 个答案:

答案 0 :(得分:1)

您需要递归类型遍历

type PartialDeepKeyOf<T> = {
    [P in keyof T]: T[P] extends string
    ? string[]
    : PartialDeepKeyOf<T[P]>
};

Playground