import { Action } from "redux";
import { IVirtualStoreConstructor } from "./virtual-store";
export declare type IAData = any;
export interface IActionData<IData extends IAData> {
    payload?: IData;
    virtualStorage?: string;
}
export interface IAction<IData extends IAData> extends IActionData<IData>, Action {
}
export interface IReducer<IData extends IAData, ValueInterface> {
    (state: ValueInterface, action: ReduxAction<IData, ValueInterface>): ValueInterface | void;
}
export interface ISingleReducer<ValueInterface, IData extends IAData> {
    (state: ValueInterface, action: IData, rawAction: IAction<IData>): ValueInterface | void;
    displayName?: string;
}
export interface IReduxActionConstructor<IData extends IAData, ValueInterface = void> {
    new (payload: IData, virtualStore?: IVirtualStoreConstructor<any>): ReduxAction<IData, ValueInterface>;
}
export declare abstract class ReduxAction<IData extends IAData, VI = void> implements IAction<IData> {
    readonly type: string;
    readonly payload: IData;
    readonly virtualStorage?: string;
    constructor(payload: IData, VirtualStore?: IVirtualStoreConstructor<VI> | '*');
    static is(act: IAction<any>): boolean;
    static compare<VI>(act: IAction<any>, Action: IReduxActionConstructor<any, VI>, VirtualStore?: IVirtualStoreConstructor<VI>): boolean;
    toJSON(): IAction<IData>;
}
