declare module 'lru-memoizer' { type INodeStyleCallBack = ( err: NodeJS.ErrnoException, result?: SuccessArg ) => void; interface IMemoized { (arg1: T1, cb: INodeStyleCallBack): void; (arg1: T1, arg2: T2, cb: INodeStyleCallBack): void; (arg1: T1, arg2: T2, arg3: T3, cb: INodeStyleCallBack): void; (arg1: T1, arg2: T2, arg3: T3, arg4: T4, cb: INodeStyleCallBack): void; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, cb: INodeStyleCallBack ): void; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, cb: INodeStyleCallBack ): void; keys: () => string[]; } interface IMemoizedSync { (arg1: T1): TResult; (arg1: T1, arg2: T2): TResult; (arg1: T1, arg2: T2, arg3: T3): TResult; (arg1: T1, arg2: T2, arg3: T3, arg4: T4): TResult; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5 ): TResult; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6 ): TResult; keys: () => string[]; } interface IMemoizableFunction { (arg1: T1, cb: INodeStyleCallBack): void; (arg1: T1, arg2: T2, cb: INodeStyleCallBack): void; ( arg1: T1, arg2: T2, arg3: T3, cb: INodeStyleCallBack ): void; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, cb: INodeStyleCallBack ): void; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, cb: INodeStyleCallBack ): void; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, cb: INodeStyleCallBack ): void; } interface IMemoizableFunctionSync { (arg1: T1): TResult; (arg1: T1, arg2: T2): TResult; (arg1: T1, arg2: T2, arg3: T3): TResult; (arg1: T1, arg2: T2, arg3: T3, arg4: T4): TResult; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5 ): TResult; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6 ): TResult; } interface IHashingFunction { (arg1: T1): string; (arg1: T1, arg2: T2): string; (arg1: T1, arg2: T2, arg3: T3): string; (arg1: T1, arg2: T2, arg3: T3, arg4: T4): string; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5 ): string; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6 ): string; } interface IItemMaxAgeFunction { (arg1: T1, result: TResult): number; (arg1: T1, arg2: T2, result: TResult): number; (arg1: T1, arg2: T2, arg3: T3, result: TResult): number; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, result: TResult ): number; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, result: TResult ): number; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, result: TResult ): number; } interface IBypassFunction { (arg1: T1): boolean; (arg1: T1, arg2: T2): boolean; (arg1: T1, arg2: T2, arg3: T3): boolean; (arg1: T1, arg2: T2, arg3: T3, arg4: T4): boolean; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5 ): boolean; ( arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6 ): boolean; } interface IMemoizeOptions { load: IMemoizableFunction; hash: IHashingFunction; itemMaxAge?: IItemMaxAgeFunction; bypass?: IBypassFunction; clone?: boolean; freeze?: boolean; stale?: boolean; max?: number; maxAge?: number; length?: number; dispose?: (key: string, value: TResult) => void; } interface IMemoizeOptionsSync extends IMemoizeOptions { load: IMemoizableFunctionSync; } interface IMemoizer { (params: IMemoizeOptions): IMemoized; sync: ( params: IMemoizeOptionsSync ) => IMemoizedSync; } const memoize: IMemoizer; export = memoize; }