通用接口扩展TypeScript中的参数化接口

时间:2019-01-14 17:31:48

标签: typescript generics interface

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

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

interface HTMLEvent<T> extends Omit<Event, 'target'> {
    target: T;
}

现在,我想创建EventType类型,该类型将接受事件类型,例如MouseEvent和目标类型。

我已经尝试过了:

interface EventType<E, T> extends Omit<E, 'target'> {
    target: T;
}

const e: EventType<MouseEvent, HTMLButtonElement>;

但出现错误:

  

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

我认为我需要的是一个可以创建类型的函数。

在TypeScript中可以使用接口EventType吗?是否可以有一个通用类型而无需为每种事件类型指定通用接口。

1 个答案:

答案 0 :(得分:3)

关于接口继承的限制,该错误非常清楚。由于类型包含未解析的类型参数,因此Typescript不允许您在接口的extends子句中使用它。

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

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