export type Resolveable<T> = T | Promise<T> | ((...params: any[]) => T | Promise<T>);
export type ResolvedParams<T> = {
    [K in keyof T]: Resolveable<T[K]>;
};
type ResolvedProperty<T> = T extends Resolveable<infer U> ? Promise<U> : T;
export declare function resolveValue<T>(value: Resolveable<T>, ...params: any[]): Promise<T>;
export declare function createResolvedObject<T>(obj: ResolvedParams<T>, ...params: any[]): { [K in keyof T]: ResolvedProperty<T[K]>; };
export declare function resolveObject<T>(obj: {
    [K in keyof T]: ResolvedProperty<T[K]>;
}): Promise<{ [K in keyof T]: Awaited<ResolvedProperty<T[K]>>; }>;
export {};
