在 TypeScript 中扩展参数化接口的通用接口
Posted
技术标签:
【中文标题】在 TypeScript 中扩展参数化接口的通用接口【英文标题】:Generic interface extending parameterized interface in TypeScript 【发布时间】:2019-06-08 17:36:40 【问题描述】:我有这样的类型,我在扩展接口时覆盖单一类型:
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>;
但出现错误:
接口只能扩展对象类型或对象的交集 具有静态已知成员的类型。
我认为我需要的是一个可以创建类型的函数。
接口EventType
可以在 TypeScript 中使用吗?是否可以拥有一种泛型类型而无需为每种事件类型指定泛型接口。
【问题讨论】:
【参考方案1】:这个错误非常清楚地说明了对接口继承的限制。由于类型包含未解析的类型参数,Typescript 不会让你在接口的 extends 子句中使用它。
你可以使用交叉类型来获得类似的效果:
type EventType<E extends Event, T> = Omit<E, 'target'> &
target: T;
【讨论】:
以上是关于在 TypeScript 中扩展参数化接口的通用接口的主要内容,如果未能解决你的问题,请参考以下文章