declare type Func = (...args: any[]) => any; export interface Cache { create: CacheCreateFunc; } interface CacheCreateFunc { (): DefaultCache; } interface DefaultCache { get(key: K): V; set(key: K, value: V): void; } export declare type Serializer = (args: any[]) => string; export interface Options { cache?: Cache>; serializer?: Serializer; strategy?: MemoizeFunc; } export interface ResolvedOptions { cache: Cache>; serializer: Serializer; } export interface MemoizeFunc { (fn: F, options?: Options): F; } export default function memoize(fn: F, options?: Options): F | ((arg: any) => any); export declare type StrategyFn = (this: unknown, fn: F, cache: DefaultCache>, serializer: Serializer, arg: any) => any; export interface Strategies { variadic: MemoizeFunc; monadic: MemoizeFunc; } export declare const strategies: Strategies; export {}; //# sourceMappingURL=index.d.ts.map