alistair
Version:
11 lines (9 loc) • 527 B
TypeScript
type Listener<P extends Record<string, readonly unknown[]>, Key extends keyof P> = (...args: P[Key]) => unknown;
declare class EventBus<Payloads extends Record<string, readonly unknown[]> = {}> {
private readonly listeners;
constructor();
on<K extends keyof Payloads>(key: K, listener: Listener<Payloads, K>): () => void;
off<K extends keyof Payloads>(key: K, listener: Listener<Payloads, K>): void;
emit<K extends keyof Payloads>(key: K, ...args: Payloads[K]): void;
}
export { EventBus, type Listener };