import { MemoizedProjection } from '@ngrx/store';
import { EqualsFn } from './is-equal';
export type TypedMemoizedProjection<TArgs extends unknown[] = unknown[], TResult = unknown> = MemoizedProjection & {
    memoized: (...args: TArgs) => TResult;
    setResult: (result?: TResult) => void;
};
/**
 * Uses the same logic as the `defaultMemoize` function from `@ngrx/store`.
 * The difference is that the `isArgumentsEqual` function is now called only once with the previous and current arguments instead of once for each argument.
 * This enables us to write better TypeScript types for the `isArgumentsEqual` function.
 *
 * @see https://ngrx.io/api/store/defaultMemoize
 */
export declare function typeFriendlyDefaultMemoize<TArgs extends unknown[] = unknown[], TResult = unknown>(projectionFn: (...args: TArgs) => TResult, isArgumentsEqual?: EqualsFn<TArgs>, isResultEqual?: EqualsFn<TResult>): TypedMemoizedProjection<TArgs, TResult>;
