type EventMap = { message: string; error: Error; count: number };↵
class TypedEmitter<T extends Record<string, unknown>> {↵
private handlers: Partial<{ [K in keyof T]: ((data: T[K]) => void)[] }> = {};↵
on<K extends keyof T>(event: K, handler: (data: T[K]) => void): void {↵
if (!this.handlers[event]) this.handlers[event] = [];↵
this.handlers[event]!.push(handler);↵
}↵
emit<K extends keyof T>(event: K, data: T[K]): void {↵
this.handlers[event]?.forEach(h => h(data));↵
}↵
}↵
const emitter = new TypedEmitter<EventMap>();↵
emitter.on("message", (msg) => console.log(msg));↵
emitter.emit("message", "Hello!");