Building Type-Safe Events
Create strongly typed event systems so only valid events and payloads can be emitted and handled.
Event systems are common in apps. ## Define event map ```ts type Events = { login: { userId: number }; logout: {}; message: { text: string }; }; ``` ## Event emitter ```ts class Emitter { emit<K extends keyof Events>(e: K, payload: Events[K]) { console.log(e, payload); } } const em = new Emitter(); em.emit("login", { userId: 1 }); // em.emit("login", { name: "x" }); ❌ ``` ## Graph ```mermaid flowchart TD A[Event Name] --> B[Payload Type] B --> C[Emitter] ``` ## Remember - Map event names to payloads - Use keyof + generics