我有这样的类型,我在扩展接口时覆盖了单个类型:
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
吗?是否可以有一个通用类型而无需为每种事件类型指定通用接口。
答案 0 :(得分:3)
关于接口继承的限制,该错误非常清楚。由于类型包含未解析的类型参数,因此Typescript不允许您在接口的extends子句中使用它。
您可以使用交叉点类型来获得类似的效果:
type EventType<E extends Event, T> = Omit<E, 'target'> & {
target: T;
}