type OnRefreshFunction = (key?: KeyType, value?: ReturnType) => void | Promise; interface CacheOptions | SyncStorageEngine)> { freshseconds?: number; staleseconds?: number; storageClass?: StorageEngineType; onRefresh?: OnRefreshFunction; } export interface StorageEngine { get: (keystr: string) => Promise; set: (keystr: string, data: StorageType) => Promise; del: (keystr: string) => Promise; clear: () => Promise; } export interface SyncStorageEngine { get: (keystr: string) => StorageType | undefined; set: (keystr: string, data: StorageType) => void; del: (keystr: string) => void; clear: () => void; } type OptionalArgPlus = T extends undefined ? undefined extends T ? [V] : [T, V] : [T, V]; type OptionalArgBoth = T extends undefined ? undefined extends T ? V extends undefined ? undefined extends V ? [] : [T, V] | [] : [T, V] : V extends undefined ? undefined extends V ? [T] | [] : [T, V] | [T] | [] : [T, V] : V extends undefined ? undefined extends V ? [T] : [T, V] | [T] : [T, V]; type FetcherFunction = ((key: KeyType) => Promise) | ((key: KeyType, helper: HelperType) => Promise) | (() => Promise); export declare class Cache { private fetcher; private options; private storage; private activeWork; private activeGets; private onRefresh?; constructor(fetcher: FetcherFunction, options?: CacheOptions); get(...params: OptionalArgBoth): Promise; set(...params: OptionalArgPlus): Promise; invalidate(key: KeyType | string): Promise; clear(): Promise; refresh(...params: OptionalArgBoth): Promise; private fresh; private valid; } export {};