export class Emitter<E extends Record<string, unknown>> { private handlers: { [K in keyof E]?: Array<(p: E[K]) => void> } = {}; on<K extends keyof E>(event: K, fn: (p: E[K]) => void): () => void { const list = (this.handlers[event] ??= []); list.push(fn); return () => { this.handlers[event] = list.filter((h) => h !== fn); }; } emit<K extends keyof E>(event: K, payload: E[K]): void { this.handlers[event]?.forEach((fn) => fn(payload)); } }