我开始深入研究泛型并有一个看起来像这样的泛型事件类
export interface Listener < T > {
(event: T): any;
}
export class EventTyped < T > {
//Array of listeners
private listeners: Listener < T > [] = [];
Attach(listener: Listener < T > ) {
this.listeners.push(listener);
}
Emit(event: T) {
this.listeners.forEach(listener => listener(event));
}
}
Run Code Online (Sandbox Code Playgroud)
我像这样创建我的事件 onPageSizeSelected = new EventType<PageSizeSelector>();
我的听众签名是这样的PageSizeSelectedHandler(event:Event,object:PageSizeSelector)。
当我去附加这样的事件时,pageSizeSelector.onPageSizeSelected.Attach(this.PageSizeSelectedHandler.bind(this))不会抛出错误。当处理程序像这样附加时pageSizeSelector.onPageSizeSelected.Attach(this.PageSizeSelectedHandler)。它立即发现方法签名不正确并且参数过多。
打字稿无法正确推断方法签名的绑定是什么?如何安全地保留this我的事件并强类型化我的事件?