import { IDisposable, IExternalDisposeCallback } from '../types/disposable';
export declare class RaiiScope implements IDisposable {
    static doInside<TArgs extends IDisposable[], TResult>(resources: TArgs, action: (...args: TArgs) => TResult): TResult;
    static doInsideAsync<TArgs extends IDisposable[], TResult>(resources: TArgs, action: (...args: IDisposable[]) => Promise<TResult>): Promise<TResult>;
    protected _stack: IDisposable[];
    protected _isDisposed: boolean | undefined;
    constructor(...args: IDisposable[]);
    push<T extends IDisposable | any>(resource: T, disposeCallback?: IExternalDisposeCallback<T>): T;
    dispose(): Promise<void> | void;
    protected disposeImpl(): Promise<void> | void;
    protected pushUnique<T extends IDisposable>(resource: T): T;
}
