具有相同字段名称但类型不同的类型

时间:2020-01-18 01:15:07

标签: typescript types record

假设我的类型如下:

type Thing = {
    aField: string;
    anotherField: number;
    // ...
}

我想创建一个具有所有相同字段但具有布尔值的“掩码”类型:

type ThingMask = {
    aField: boolean;
    anotherField: boolean;
    // ...
}

有没有一种方法可以通过编程方式执行此操作而不必对掩码类型进行硬编码?

1 个答案:

答案 0 :(得分:1)

是的,您想要一个mapped type

type ThingMask = { [K in keyof Thing]: boolean };
/* type ThingMask = {
    aField: boolean;
    anotherField: boolean;
} */

请注意,默认情况下,这也会将readonly和可选(?)修饰符从原始类型复制到映射类型。如果您不希望发生这种情况,可以使用-readonly-?之类的修饰符来添加alter this behavior。但是,既然您不问这个,我就不再赘述。

希望有所帮助;祝你好运!

link to code in Playground