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

类型脚本中扩展参数化接口的通用接口

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

    我有这样的类型,在扩展接口时覆盖单个类型:

    type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
    
    interface HTMLEvent<T> extends Omit<Event, 'target'> {
        target: T;
    }
    

    现在我想创建一个事件类型,它将接受事件类型,例如mouseEvent和target类型。

    我试过了:

    interface EventType<E, T> extends Omit<E, 'target'> {
        target: T;
    }
    
    const e: EventType<MouseEvent, HTMLButtonElement>;
    

    但有错误:

    接口只能扩展对象类型或对象的交集 具有静态已知成员的类型。

    我想我需要一个函数来创建一个类型。

    IS接口 EventType 可能在typescript中?是否可以有一个泛型类型,而不需要为每个事件类型指定泛型接口。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Titian Cernicova-Dragomir    6 年前

    对于接口继承的限制,错误是非常明显的。由于类型包含未解析的类型参数,因此typescript不允许在接口的extends子句中使用它。

    您可以使用交叉点类型来获得类似的效果:

    type EventType<E extends Event, T> = Omit<E, 'target'> &  {
        target: T;
    }