export type Parameters = F extends (...args: infer T) => any ? T : never; export abstract class MessageBus { abstract on(topic: E, cb: T[E]): void; abstract once(topic: E, cb: T[E]): void; abstract emit(topic: E, args?: Parameters): boolean; abstract destroy(): void; }