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

操作现有接口/对象类型

  •  1
  • ThomasReggi  · 技术社区  · 7 年前

    我在找打字本 Generic<> 这样可以做到以下几点:

    • 给予 Root 接口我要覆盖此接口
    • 接口我想使任何属性成为可选的
    • shallow /顶级属性
    • Overwrite
    interface Root {
     name: string;
     age: number | string;
     hometown: string
    }
    
    interface Overwrite {
     age: number; // overwriteing the union
     hometown?: Root['hometown'] // making a property optional
    }
    

    应该有效:

    type RL = Generic<Root, Overwrite> // should have `name`, `age`, `hometown`
    

    应该显示错误 覆盖 功能是因为 lastName 不在 :

    type RL = Generic<Root,{lastName: string}>
    
    0 回复  |  直到 7 年前
        1
  •  0
  •   ThomasReggi    7 年前

    这里有一个非常详细的工作示例。

    export type Merge<A, B> = Omit<A, Extract<keyof A, keyof B>> & B;
    export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
    export type Overwrite<A, B extends { [K in keyof B]: K extends keyof A ? A[K] : never }> =
      Merge<Omit<Merge<A, B>, Extract<keyof A, keyof B>>, Pick<Merge<A, B>, Extract<keyof A, keyof B>>>;
    
    推荐文章