export class EventEmitter { private handlers: Map; constructor() { this.handlers = new Map(); } public on(eventName: string, handler: Function): void { if (!this.handlers.has(eventName)) { this.handlers.set(eventName, []); } this.handlers.get(eventName)?.push(handler); } public off(eventName: string, handler: Function): void { if (!this.handlers.has(eventName)) { return; } const handlers = this.handlers.get(eventName); const index = handlers?.indexOf(handler); if (index !== undefined && index !== -1) { handlers?.splice(index, 1); } } public emit(eventName: string, args: any): void { if (!this.handlers.has(eventName)) { return; } const handlers = this.handlers.get(eventName); handlers?.forEach((handler) => { handler(args); }); } }