import "./tc39.js";
export declare abstract class FDisposable {
    [Symbol.asyncDispose](): Promise<void>;
    abstract dispose(): Promise<void>;
    static disposeAll(...instances: ReadonlyArray<FDisposable>): Promise<void>;
    static instanceOf(test: unknown): test is FDisposable;
}
export declare abstract class FDisposableBase extends FDisposable {
    private _disposed?;
    private _disposingPromise?;
    get disposed(): boolean;
    get disposing(): boolean;
    dispose(): Promise<void>;
    protected abstract onDispose(): void | Promise<void>;
    protected verifyNotDisposed(): void;
}
export declare class FDisposableMixin extends FDisposableBase {
    static applyMixin(targetClass: any): void;
    protected onDispose(): void | Promise<void>;
    private constructor();
}
export declare function makeDisposable(dispose: () => void | Promise<void>): FDisposable;
