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