import { EventEmitter2 as EventEmitter } from 'eventemitter2';
/**
 * Typed Event Emitter Reference:
 * https://rjzaworski.com/2019/10/event-emitters-in-typescript#a-typescript-event-emitter-interface
 */
export declare type EventMap = Record<string, any>;
export declare type EventKey<T extends EventMap> = string & keyof T;
export declare type EventReceiver<T> = (params: T) => void;
export declare abstract class TypedEventEmitter<T extends EventMap> extends EventEmitter {
    on<K extends EventKey<T>>(eventName: K, fn: EventReceiver<T[K]>): import("eventemitter2").Listener | this;
    off<K extends EventKey<T>>(eventName: K, fn: EventReceiver<T[K]>): this;
    emit<K extends EventKey<T>>(eventName: K, params: T[K]): boolean;
    listeners<K extends EventKey<T>>(eventName: K): EventReceiver<T[K]>[];
}
