type Topics = { "event.post": EventPost1Data; }; type Callbacks = (data: Topics[T]) => void; class EventBus { private subscribers: { [K in T]?: Callbacks[] } = {}; subscribe(topic: K, callback: Callbacks): void { if (!this.subscribers[topic]) { this.subscribers[topic] = []; } this.subscribers[topic]?.push(callback); } unsubscribe(topic: K, callback: Callbacks): void { const callbacks = this.subscribers[topic]; if (callbacks) { this.subscribers[topic] = callbacks.filter(cb => cb !== callback); } } publish(topic: K, payload: Topics[K]): void { const callbacks = this.subscribers[topic]; if (callbacks) { for (const callback of callbacks) { callback(payload); } } } } // Define topics and their corresponding payload types export const msgbus = new EventBus();