declare type Disposer = () => void;
declare type Listener = (...args: any[]) => any;
export interface IDisposable {
    dispose(...args: any[]): any;
}
export declare class Disposable {
    private disposer;
    constructor(disposer: Disposer);
    dispose(...args: any[]): void;
}
export declare class DisposablesComposite {
    private disposables;
    constructor();
    add(disposable: any): any;
    dispose(...args: any[]): void;
}
export declare class EventEmitter<T> {
    private listeners;
    private onceListeners;
    constructor();
    emit(event: T, ...args: any[]): void;
    on(event: T, cb: Listener): Disposable;
    once(event: T, cb: Listener): Disposable;
    emitWithReturn<K>(event: T, ...args: any[]): K[];
    clear(event?: T): void;
}
export {};
