import { ExtractRematchStateFromModels, Models, Model, Action, RematchRootState, ModelReducers, ModelEffects, ModelEffectsCreator } from '@rematch/core'; import * as Reselect from 'reselect'; import { Store as ReduxStore, Reducer as ReduxReducer } from 'redux'; export { createSelector, createStructuredSelector } from 'reselect'; export declare type Selector = TProps extends void ? (state: TState) => TReturns : (state: TState, props: TProps) => TReturns; export declare type ExtractSelectorsFromModel, TModel extends Model> = TModel['selectors'] extends (...args: any[]) => infer TReturnObj ? TReturnObj : TModel['selectors'] extends Record ? TModel['selectors'] : never; export declare type ExtractSelectorsSignatureFromSelectorsModel = TSelectorsConfigObject[TKey] extends (...args: any[]) => infer TSelector ? TSelector extends (props: infer TProps) => Selector ? (props: TProps) => Selector : TSelector extends Selector ? Selector : TSelector extends Selector ? Selector : never : never; export interface SelectConfig, TExtraModels extends Models> { sliceState?: (state: ExtractRematchStateFromModels, model: Model) => Record | undefined; selectorCreator?: any; } export declare type ModelSelectors, TExtraModels extends Models, TModel extends Model> = { [key in keyof ExtractSelectorsFromModel]: ExtractSelectorsSignatureFromSelectorsModel, ExtractSelectorsFromModel, key>; }; export declare type Slicer = ((resultFn: (slice: TSliceState) => TReturns) => Selector) & Selector; export interface ModelSelectorFactories, TExtraModels extends Models, TSliceState = any> { [key: string]: SelectorFactory | SelectorParametricFactory; } export declare type StoreSelectors, TExtraModels extends Models> = { [TModelKey in keyof TModels]: ModelSelectors; }; export declare type SelectorFactory, TExtraModels extends Models, TSliceState = any> = (this: ModelSelectorFactories, models: StoreSelectors) => Selector, TReturns>; export declare type SelectorParametricFactory, TExtraModels extends Models, TSliceState = any, TProps = any, TReturns = any> = (this: ModelSelectorFactories, models: StoreSelectors, props: TProps) => Selector, TReturns, TProps>; export declare type ParameterizerSelectorFactory, TExtraModels extends Models, TSliceState = any, TProps = any, TReturns = any> = (this: ModelSelectorFactories, models: StoreSelectors, props: TProps) => (props: TProps) => Selector, TReturns>; export declare type Parameterizer, TExtraModels extends Models, TSliceState = any> = (factory: SelectorParametricFactory) => ParameterizerSelectorFactory; export declare type ModelSelectorsFactory, TExtraModels extends Models, TSliceState = any> = (slice: Slicer>, createSelector: typeof Reselect.createSelector, hasProps: Parameterizer) => ModelSelectorFactories; export declare type ModelSelectorsConfig, TSliceState = any, TExtraModels extends Models = Record> = ModelSelectorsFactory | ModelSelectorFactories; export declare type RematchSelect, TExtraModels extends Models, TRootState = RematchRootState> = ( any; }>(mapSelectToProps: (select: RematchSelect) => TReturn) => Reselect.OutputParametricSelector; }, Reselect.Selector> & Reselect.OutputSelector; }, Reselect.Selector>) & StoreSelectors; declare module '@rematch/core' { interface RematchStore, TExtraModels extends Models> extends ReduxStore, Action> { select: RematchSelect>; } interface Model, TState = any> { selectors?: ModelSelectorsConfig; } interface ModelCreator { >(): | undefined, BR extends ReduxReducer | undefined, E extends ModelEffects | ModelEffectsCreator | undefined, SE extends ModelSelectorsConfig | undefined, S, BS = S>(mo: { name?: string; state: S; reducers?: R; baseReducer?: BR; effects?: E; selectors?: SE; }) => { name?: string; state: S; } & (E extends undefined ? {} : { effects: E; }) & (R extends undefined ? {} : { reducers: R; }) & (BR extends undefined ? {} : { baseReducer: BR; }) & (SE extends undefined ? {} : { selectors: SE; }); } } //# sourceMappingURL=types.d.ts.map