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

组合覆盖(合并)类型运算符

  •  1
  • WHITECOLOR  · 技术社区  · 6 年前

    试图作曲 Overwrite 类型运算符,它应该从第一个操作数类型中获取键,并用第二个操作数类型(也称为对象)中的键替换它们 merge 操作:

    type Overwrite<T, U> = { [P in Exclude<keyof T, keyof U>]: T[P] } & U
    
    type A = {
    
      a?: number,
      d: boolean
      b: string
    }
    
    type B = {  
      b: number
    }
    
    type C = Overwrite<A, B> = {
      a: number | undefined; // not optinal anymore
      d: boolean;
    } & B
    

    光学键 a 从第一个操作数 A 成为必需的(尽管 undefined 可能的价值)

    是否可以任选?

    1 回复  |  直到 6 年前
        1
  •  2
  •   CRice    6 年前

    尝试使用内置 Pick 键入而不是创建自己的映射类型。类似于:

    type Overwrite<T, U> = Pick<T, Exclude<keyof T, keyof U>> & U
    

    它将保留上的任何修饰符 T ,例如只读或可选,而使用自定义映射类型将删除这些修饰符 * .

    在示例中使用该类型时:

    declare const test: Overwrite<A, B>;
    test.a // (property) a?: number (note: still optional, no undefined union)
    test.b // (property) b: number
    test.c // (property) d: boolean
    

    Playground Link