import type { Selector, GetParamsFromSelectors, OutputSelector, EqualityFn, SelectorArray, SelectorResultArray } from './types'; export type { Selector, GetParamsFromSelectors, OutputSelector, EqualityFn, SelectorArray, SelectorResultArray, ParametricSelector, OutputParametricSelector } from './types'; import { defaultMemoize, defaultEqualityCheck, DefaultMemoizeOptions } from './defaultMemoize'; export { defaultMemoize, defaultEqualityCheck }; export type { DefaultMemoizeOptions }; declare type DropFirst = T extends [unknown, ...infer U] ? U : never; export declare function createSelectorCreator unknown, MemoizeFunction extends (func: F, ...options: any[]) => F, MemoizeOptions extends unknown[] = DropFirst>>(memoize: MemoizeFunction, ...memoizeOptionsFromArgs: DropFirst>): CreateSelectorFunction; interface CreateSelectorOptions { memoizeOptions: MemoizeOptions[0] | MemoizeOptions; } /** * An instance of createSelector, customized with a given memoize implementation */ interface CreateSelectorFunction unknown, MemoizeFunction extends (func: F, ...options: any[]) => F, MemoizeOptions extends unknown[] = DropFirst>> { /** Input selectors as separate inline arguments */ (...items: [ ...Selectors, (...args: SelectorResultArray) => Result ]): OutputSelector, ((...args: SelectorResultArray) => Result) & ReturnType>; /** Input selectors as separate inline arguments with memoizeOptions passed */ (...items: [ ...Selectors, (...args: SelectorResultArray) => Result, CreateSelectorOptions ]): OutputSelector, ((...args: SelectorResultArray) => Result) & ReturnType>; /** Input selectors as a separate array */ (selectors: [...Selectors], combiner: (...args: SelectorResultArray) => Result, options?: CreateSelectorOptions): OutputSelector, ((...args: SelectorResultArray) => Result) & ReturnType>; } export declare const createSelector: CreateSelectorFunction<(...args: unknown[]) => unknown, typeof defaultMemoize, [equalityCheckOrOptions?: EqualityFn | DefaultMemoizeOptions | undefined]>; declare type SelectorsObject = { [key: string]: (...args: any[]) => any; }; export interface StructuredSelectorCreator { (selectorMap: SelectorMap, selectorCreator?: CreateSelectorFunction): (state: SelectorMap[keyof SelectorMap] extends (state: infer State) => unknown ? State : never) => { [Key in keyof SelectorMap]: ReturnType; }; (selectors: { [K in keyof Result]: Selector; }, selectorCreator?: CreateSelectorFunction): Selector; } export declare const createStructuredSelector: StructuredSelectorCreator;