type EventEmitterTypes<T> = {
[K in keyof T]: (payload: any) => void;
};
class TypedEventEmitter<T> extends EventEmitter {
emit<K extends keyof EventEmitterTypes<T>>(event: K, payload: any): boolean {
return super.emit(event as string, payload);
}
on<K extends keyof EventEmitterTypes<T>>(event: K, listener: EventEmitterTypes<T>[K]): this {
return super.on(event as string, listener);
}
off<K extends keyof EventEmitterTypes<T>>(event: K, listener: EventEmitterTypes<T>[K]): this {
return super.off(event as string, listener);
}
once<K extends keyof EventEmitterTypes<T>>(event: K, listener: EventEmitterTypes<T>[K]): this {
return super.once(event as string, listener);
}
}
type EventEmitterTypes<T> = {
[K in keyof T]: (payload: any) => void;
};
class TypedEventEmitter<T> extends EventEmitter {
emit<K extends keyof EventEmitterTypes<T>>(event: K, payload: any): boolean {
return super.emit(event as string, payload);
}
on<K extends keyof EventEmitterTypes<T>>(event: K, listener: EventEmitterTypes<T>[K]): this {
return super.on(event as string, listener);
}
off<K extends keyof EventEmitterTypes<T>>(event: K, listener: EventEmitterTypes<T>[K]): this {
return super.off(event as string, listener);
}
once<K extends keyof EventEmitterTypes<T>>(event: K, listener: EventEmitterTypes<T>[K]): this {
return super.once(event as string, listener);
}
}