TypeScriptTypeScript24 min read

Building Type-Safe Events

Create strongly typed event systems so only valid events and payloads can be emitted and handled.

David Miller
January 5, 2026
0.7k28

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
      
#TypeScript#Advanced#Patterns