type Listener = (payload: T) => void; export class EventEmitter { private listeners = new Set>(); on(listener: Listener): () => void { this.listeners.add(listener); return () => this.off(listener); } off(listener: Listener): void { this.listeners.delete(listener); } emit(payload: T): void { this.listeners.forEach((listener) => listener(payload)); } clear(): void { this.listeners.clear(); } }