export type WrappedPromise<T> = Promise<T> & {
    resolved?: T;
    rejected?: any;
};
export type ResolvablePromise<T> = Promise<T> & {
    resolve: (value: T) => void;
    reject: (reason?: any) => void;
};
/**
 * Wrap a promise to save the resolved value and error.
 * Note: you can't await on a WrappedPromise, you must use then.
 */
export declare function wrapPromise<T>(promise: Promise<T>): WrappedPromise<T>;
/**
 * Similar to `wrapPromise`, but for a resolved value.
 * Returns immediately without creating a microtask.
 */
export declare function wrapResolved<T>(value: T): WrappedPromise<T>;
/**
 * Create a promise that can be resolved or rejected later.
 */
export declare function resolvablePromise<T>(): ResolvablePromise<T>;
