import React from 'react';
import { MapStateToPropsParam, MapDispatchToPropsParam, InferableComponentEnhancerWithProps } from 'react-redux';
export type FactoryElement = (...args: any[]) => React.ComponentType;
export type Factory = FactoryElement & {
    deps: FactoryElement[];
};
export type InjectorType = {
    provide: (factory: any, replacement: any) => InjectorType;
    get: (fac: any, parent?: any) => any;
};
export declare const ERROR_MSG: {
    wrongRecipeType: string;
    noDep: (fac: any, parent: any) => string;
    notFunc: string;
};
export declare function injector(map?: Map<any, any>): InjectorType;
export declare function flattenDeps(allDeps: Factory[], factory: any): Factory[];
export declare function provideRecipesToInjector(recipes: [Factory, Factory][], appInjector: InjectorType): InjectorType;
export declare function typeCheckRecipe(recipe: any): boolean;
export interface WithState<RootState> {
    <TStateProps = object, TDispatchProps = object, TOwnProps = object, State = RootState>(lenses: any[], mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>, mapDispatchToProps?: MapDispatchToPropsParam<TDispatchProps, TOwnProps>): InferableComponentEnhancerWithProps<TStateProps & TDispatchProps, TOwnProps>;
}
export declare function withState(lenses?: any[], mapStateToProps?: (state: any) => any, actions?: {}): (Component: any) => import("react-redux").ConnectedComponent<({ state, ...props }: {
    [x: string]: any;
    state: any;
}) => React.JSX.Element, {
    context?: import("react-redux/es/components/Context").ReactReduxContextInstance | undefined;
    store?: import("redux").Store | undefined;
}>;
