Observer Pattern
Implementacion del patron Observer con tipado fuerte para comunicacion desacoplada entre modulos.
class EventBus {
constructor() {
this.listeners = new Map();
}
on(event, handler) {
if (!this.listeners.has(event)) this.listeners.set(event, new Set());
this.listeners.get(event).add(handler);
return () => this.listeners.get(event).delete(handler);
}
emit(event, data) {
this.listeners.get(event)?.forEach((handler) => handler(data));
}
}
const bus = new EventBus();
const off = bus.on('user:login', ({ userId }) => console.log(userId));
bus.emit('user:login', { userId: 'u-1' });
off();