代码之家  ›  专栏  ›  技术社区  ›  Bluefire

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

  •  0
  • Bluefire  · 技术社区  · 6 年前

    假设我有如下类型:

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

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

    有没有一种方法可以在不必硬编码掩码类型的情况下以编程方式执行此操作?

    1 回复  |  直到 6 年前
        1
  •  1
  •   jcalz    6 年前

    是的,你想要一个 mapped type :

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

    注意,默认情况下,这也会复制 readonly 可选的( ? )从原始类型到映射类型的修饰符。如果你不想发生这种事 alter this behavior 通过使用修饰符 -readonly -? . 但既然你没问这个,我就不谈了。

    希望有帮助,祝你好运!

    link to code in Playground