问题描述
我正在尝试在可扩展类中实现"nanoevents"
库。
您可以在此处查看库的相关类型定义:https://github.com/ai/nanoevents/blob/128fac9/index.d.ts
// this is straight from the above link,only used as reference
interface EventsMap {
[event: string]: any
}
interface DefaultEvents extends EventsMap {
[event: string]: (...args: any) => void
}
// ...
export declare class Emitter<Events extends EventsMap = DefaultEvents> {
// ...
events: Partial<{ [E in keyof Events]: Events[E][] }>
// ...
on<K extends keyof Events> (this: this,event: K,cb: Events[K]): Unsubscribe
// ...
}
我想将我的类定义为泛型,以便继承的子类可以定义其相关事件并利用类型检查。
import { createNanoEvents,Emitter,Unsubscribe } from "nanoevents";
class Extendable<Events extends {}={}>
{
protected _emitter:Emitter<Events> = createNanoEvents<Events>();
public on<E extends keyof Events>(event:E,callback:Events[E]):Unsubscribe
{
return this._emitter.on(event,callback);
}
}
我在这里成功地扩展了我的课程:
interface ExtendedEvents {
'a':()=>void,'b':(c:number)=>void,}
class Extended<Events extends ExtendedEvents=ExtendedEvents> extends Extendable<Events>
{
}
现在我想将其传递给以下功能:
function foo(extendableType:typeof Extendable):void { /* ... */ }
foo(Extended); // <-- error here
哪个失败:
TS2345: Argument of type 'typeof Extended' is not assignable to type 'typeof Extendable'.
Construct signature return types 'Extended<ExtendedEvents>' and 'Extendable<Events>' are incompatible.
The types of '_emitter.events' are incompatible between these types.
Type 'Partial<{ a: (() => void)[]; b: ((c: number) => void)[]; }>' is not assignable to type 'Partial<{ [E in keyof Events]: Events[E][]; }>'.
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)