type Executor<T> = (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: unknown) => void) => void;
export declare abstract class Awaitable<T = void> implements Pick<Promise<T>, keyof Promise<T>> {
    protected readonly boundThen: Promise<T>['then'];
    protected readonly boundCatch: Promise<T>['catch'];
    protected readonly boundFinally: Promise<T>['finally'];
    protected _reject: (reason: unknown) => void;
    protected _resolve: (value: T) => void;
    protected constructor(executor?: Executor<T>);
    get then(): <TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined) => Promise<TResult1 | TResult2>;
    get catch(): <TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined) => Promise<T | TResult>;
    get finally(): (onfinally?: (() => void) | null | undefined) => Promise<T>;
    get [Symbol.toStringTag](): string;
}
export {};
