10LOC

#event-emitter

TypeScriptadvanced

A type-safe event emitter keyed by an event-name-to-payload map

type EventMap = Record<string, unknown>;

export class TypedEmitter<Events extends EventMap> {
  private listeners: { [K in keyof Events]?: Array<(payload: Events[K]) => void> } = {};

Make on() and emit() reject mismatched event names and payloads at compile time, from one map type instead of per-event overloads.