type EventCallback = ((...params: any) => void);
interface EventListener {
    [eventName: string]: ((...args: any[]) => void)[];
}
declare class EventDisposable {
    private listeners;
    private eventName;
    private index;
    constructor(listeners: EventListener, eventName: string, index: number);
    /**
     * Unsubscribes to the event.
     */
    dispose(): void;
}
export declare class EventEmitter {
    private listeners;
    constructor();
    /**
     * Subscribes to an event.
     * @param {string} eventName Event name.
     * @param {EventCallback} cb Event callback.
     */
    on(eventName: string, cb: EventCallback): EventDisposable;
    /**
     * Unsubscribes to an event.
     * @param {string} eventName Event name.
     * @param {EventCallback} cb Event callback.
     */
    off(eventName: string, cb: EventCallback): void;
    /**
     * Emits an event.
     * @param {string} eventName Event name.
     * @param args Optional parameters.
     */
    emit(eventName: string, ...args: any[]): boolean;
    dispose(): void;
}
export {};
