import 'reflect-metadata';
import State from './state';
import Store from './store';
import Action, { ActionType } from './action';
import { Middleware as ReduxMiddleware } from 'redux';
export declare class Middleware<S extends State> {
    preActionsMap: Map<ActionType, Array<(Store: Store<S>, action: Action) => Store<S>>>;
    postActionsMap: Map<ActionType, Array<(Store: Store<S>, action: Action, prevState: S) => Store<S>>>;
    private executePre;
    private executePost;
    protected call(store: Store<S>): any;
    create(store: Store<S>): ReduxMiddleware;
}
export declare class IsolatedMiddleware<S extends State, SRoot extends State> extends Middleware<S> {
    protected getState: (state: SRoot) => S;
    constructor(getState: (state: SRoot) => S);
}
