export interface EventListener<T> {
    id: string;
    listener: (data?: T) => void | Promise<void>;
}
export declare class EventDispatcher<EventMap extends Record<string, unknown>> {
    private listeners;
    addListener<E extends keyof EventMap>(eventType: E, listener: EventListener<EventMap[E]>): void;
    removeListener(eventType: keyof EventMap, id: string): void;
    dispatch<E extends keyof EventMap>(eventType: E, data?: EventMap[E]): Promise<void>;
    clear(eventType?: keyof EventMap): void;
    getListenerCount(eventType: keyof EventMap): number;
}
//# sourceMappingURL=EventDispatcher.d.ts.map