【问题标题】:Typescript same key but different type nested (keyof but nested)打字稿相同的键但嵌套的类型不同(keyof 但嵌套)
【发布时间】:2020-11-16 13:22:41
【问题描述】:

我正在尝试创建一个自定义类型,将所有类型的通用参数 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[];液化天然气:字符串[]; }' 不可分配给类型 '字符串[]'

【问题讨论】:

  • 是的,但是“我正在尝试创建一个自定义类型,将所有类型的通用参数 T 替换为 string[],但保留所有属性名称甚至嵌套。”

标签: javascript typescript


【解决方案1】:

你需要递归类型遍历

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

Playground

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 2021-11-06
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多