如何声明泛型函数类型?TS2315:类型不是通用的

费德里科

我具有观察者模式的此实现:

type EventHandler = <T extends Event>(event: T) => void;

interface Subscriber<T> {
    event: EventEnum;
    callback: EventHandler<T>;
}

我想要这个Subscriber接口,以便可以声明,例如:

interface EventEmitter {
    Xsubscribers: Array<Subscriber<EventX>>;
    Ysubscribers: Array<Subscriber<EventY>>
    addEventXListener: (callback: EventHandler<EventX>) => void;
    addEventYListener: (callback: EventHandler<EventY>) => void;
}

当我这样做时,出现以下错误:

错误TS2315:类型'EventHandler'不是通用的。

埃里亚斯·舍布洛夫斯基(Elias Schablowski)

您必须在之前添加通用名称=

type EventHandler<T extends Event> = (event: T) => void;

interface Subscriber<T extends Event> {
    // event: EventEnum;
    callback: EventHandler<T>;
}
type EventY = Event;
type EventX = Event;

interface EventEmitter {
    Xsubscribers: Array<Subscriber<EventX>>;
    Ysubscribers: Array<Subscriber<EventY>>
    addEventXListener: (callback: EventHandler<EventX>) => void;
    addEventYListener: (callback: EventHandler<EventY>) => void;
}

操场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章