declare const ACTION_MODE_SINGLE = "single"; type ActionModeSingle = typeof ACTION_MODE_SINGLE; declare const ACTION_MODE_MULTI = "multi"; type ActionModeMulti = typeof ACTION_MODE_MULTI; type ActionMode = ActionModeSingle | ActionModeMulti; interface IAction { readonly type: string; readonly mode: Mode; readonly creator: IActionCreator; readonly payload: Payload; } type Payload = T extends IActionCreator ? P : never; interface IActionCreator = IAction> { (...args: Arguments): A; readonly type: string; readonly mode: Mode; } declare function actionCreatorSingle(type: string): IActionCreator; declare function actionCreatorMulti(type: string): IActionCreator; declare function actionCreator(type: string, mode?: ActionModeSingle): IActionCreator; declare function actionCreator(type: string, mode: ActionModeMulti): IActionCreator; declare function actionCreatorDefault(type: string, defaultPayload: Payload, mode?: ActionModeSingle): IActionCreator; declare function actionCreatorDefault(type: string, defaultPayload: Payload, mode: ActionModeMulti): IActionCreator; export { ACTION_MODE_MULTI, ACTION_MODE_SINGLE, type ActionMode, type ActionModeMulti, type ActionModeSingle, type IAction, type IActionCreator, type Payload, actionCreator, actionCreatorDefault, actionCreatorMulti, actionCreatorSingle };