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 };
