export type Listener = (event: string, ...args: any[]) => any;
type RemoveListener = () => void;
/**
 * Event Emitter
 * Responsible for handling events and listeners
 */
export declare class EventEmitter {
    #private;
    /**
     * Adds a listener to the event
     * @param event
     * @param listener
     * @returns event detatch method
     */
    on(event: string, listener: Listener): RemoveListener;
    /**
     * Adds a listener to the events
     * @param event[]
     * @param listener
     * @returns event detatch methods
     */
    on(event: string[], listener: Listener): RemoveListener[];
    /**
     * Adds a listener to the event that will be called only once
     * @param event
     * @param listener
     * @returns event detatch method
     */
    once(event: string, listener: Listener): RemoveListener;
    /**
     * Adds a listener to the events that will be called only once
     * @param event[]
     * @param listener
     * @returns event detatch methods
     */
    once(event: string[], listener: Listener): RemoveListener[];
    /**
     * Adds a listener to all events
     * @param listener
     */
    all(listener: Listener): void;
    /**
     * Removes a listener from the event
     * @param event
     * @param listener
     * @returns
     */
    removeListener(event: string | string[], listener: Listener): void;
    off: (event: string | string[], listener: Listener) => void;
    /**
     * Removes all existing listeners
     */
    removeAllListeners(): void;
    /**
     * Emits an event for all listeners
     * @param event
     * @param args
     * @returns
     */
    emit(event: string, ...args: any[]): void;
}
export {};
