import type { EventOptions, EventPayload, EventRecord, EventReturn, Events, EventType, GetListenerMethod, Listener, OnceMethod, OnMethod, ShutdownMethod, WatchMethod } from '../common';
export declare class EventEmitter<TEvents extends EventRecord> implements OnMethod<TEvents>, OnceMethod<TEvents>, GetListenerMethod<TEvents>, ShutdownMethod, WatchMethod<TEvents> {
    private emitter;
    private watcher;
    private defaultOptions;
    private maxListeners;
    constructor(separator?: string, cacheSize?: number, timeout?: number, maxListeners?: number);
    on<K extends Events<TEvents>>(event: K, listener: Listener<EventPayload<TEvents, K>, void>, options?: EventOptions): this;
    on<K extends Events<TEvents>>(event: K, listener: null | Listener<EventPayload<TEvents, K>, void>, options: EventOptions & {
        watch: true;
    }): Promise<EventPayload<TEvents, K>>;
    watch<K extends Events<TEvents>>(event: K, timeoutMs?: number): Promise<EventPayload<TEvents, K>>;
    off<K extends Events<TEvents>>(event: K, listener?: Listener<EventPayload<TEvents, K>, void>): this;
    emit<K extends keyof TEvents & EventType>(event: K, payload: TEvents[K], options?: EventOptions): void;
    shutdown(): void;
    once<K extends Events<TEvents>>(event: K, listener: Listener<EventPayload<TEvents, K>, void>): this;
    once<K extends Events<TEvents>>(event: K, listener: Listener<EventPayload<TEvents, K>, void> | null, options: EventOptions & {
        watch: true;
    }): Promise<EventPayload<TEvents, K>>;
    getListener<K extends Events<TEvents>>(event: K): Listener<EventPayload<TEvents, K>, EventReturn<TEvents, K>>[];
}
