使用相同的字段名称但类型不同的类型

Type for with same field names but different types

假设我有如下类型:

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

我想制作一个 "mask" 类型,它具有所有相同的字段,但具有布尔值:

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

有没有办法以编程方式执行此操作而无需对掩码类型进行硬编码?

是的,你想要一个 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