type UnwrapFuture = T extends any ? (T extends Future ? U : T) : never; type ResolvedDeps = { [K in keyof D]: UnwrapFuture; }; type Operation = (...args: ResolvedDeps) => T | Promise; declare class Future { private operation; private dependencies; private optionNoCache; private value; private resolving; private resolvePromise?; private clear; constructor(operation: Operation, dependencies?: D, optionNoCache?: boolean); static resolve(value: T | Future): Future; static resolveOperation(operation: Operation, dependencies: D): Promise; cachedResolveOperation(operation: Operation, dependencies: D): Promise; resolve({ /** clears the cache */ clear, }?: { clear?: boolean | undefined; }): Promise; then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | null): Promise; catch(onrejected?: ((reason: any) => TResult | PromiseLike) | null): Promise; finally(onfinally?: (() => void) | null): Promise; /** clones Future and deps with noCache, depth 0 is current Future */ noCache(depth?: number): any; /** clones Future and clears cache values, depth 0 is current Future */ clone(depth?: number): any; /** creates a new future using this future as a dependency */ use(operation: Operation, dependencies?: D): Future, ...D]>; /** updates future value */ update(operation: Operation, dependencies?: D): this; } export { Future, type Operation, type ResolvedDeps, type UnwrapFuture };