/** * Memoize decorator * @example * * class Test { @Memoize() calculate(a: number, b: number): number { return a + b; } } */ export declare function Memoize(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void; /** * Memoize a pure function and only recalculate if the arguments change. * @param projectionFn - the function to memoize * @param comparatorFn - a function to compare the arguments. By default an equality check (===) is used. * * @example * const memoizedFn = memoize((a, b) => a + b).memoized(a, b); */ export declare function memoize(projectionFn: ProjectionFn, comparatorFn?: ComparatorFn): MemoizedProjection; export type ProjectionFn = (...args: any[]) => T; export type ComparatorFn = (a: any, b: any) => boolean; export type MemoizedProjection = { memoized: ProjectionFn; reset: () => void; setResult: (result?: T) => void; }; export declare function isEqualCheck(a: any, b: any): boolean;