declare type EventListener<EventConfig, Event extends keyof EventConfig> = (data: EventConfig[Event]) => void;
declare const EVENT_EXCLUDED = "ee-event-excluded";
declare const EVENT_INCLUDED = "ee-event-included";
declare type TDefaultEvent = typeof EVENT_EXCLUDED | typeof EVENT_INCLUDED;
declare type DefaultEvents<AdditionalEvents> = {
    [defaultEvent in TDefaultEvent]: keyof AdditionalEvents | TDefaultEvent;
};
export declare type EventConfig<AdditionalEvents> = AdditionalEvents & DefaultEvents<AdditionalEvents>;
export declare class ABEventEmitter<AdditionalEvents extends Record<string, any> = Record<string, any>> {
    static EventExcluded: typeof EVENT_EXCLUDED;
    static EventIncluded: typeof EVENT_INCLUDED;
    private listenersDict;
    private listenedEvents;
    constructor();
    on<E extends keyof EventConfig<AdditionalEvents>>(event: E, listener: EventListener<EventConfig<AdditionalEvents>, E>): () => void;
    off<E extends keyof EventConfig<AdditionalEvents>>(event: E, listener?: EventListener<EventConfig<AdditionalEvents>, E>): ABEventEmitter<EventConfig<AdditionalEvents>>;
    emit<E extends keyof EventConfig<AdditionalEvents>>(event: E, data: EventConfig<AdditionalEvents>[E]): ABEventEmitter<EventConfig<AdditionalEvents>>;
    offAll(): ABEventEmitter<EventConfig<AdditionalEvents>>;
    private offEvent;
    listenersNumber<E extends keyof EventConfig<AdditionalEvents>>(event: E): number;
    getListenedEvents(): (keyof EventConfig<AdditionalEvents>)[];
    getListeners<E extends keyof EventConfig<AdditionalEvents>>(event: E): EventListener<EventConfig<AdditionalEvents>, E>[];
}
export {};
