declare type AnyFn = (...args: any[]) => any;
declare type DefaultListener = Record<string, AnyFn>;
declare type ListenerItem<F extends AnyFn> = {
    listener: F;
    once?: boolean;
};
export declare class EventEmitter<L extends Record<keyof L, AnyFn> = DefaultListener> {
    _listeners: {
        [k in keyof L]?: ListenerItem<L[k]>[] | null;
    };
    on<U extends keyof L>(event: U, listener: L[U]): this;
    once<U extends keyof L>(event: U, listener: L[U]): this;
    off<U extends keyof L>(event: U, listener: L[U]): this;
    emit<U extends keyof L>(event: U, ...args: Parameters<L[U]>): void;
    removeAllListeners(): this;
}
export {};
