redux-promise-middleware-actions
Version:
Redux action creator for making async actions with redux-promise-middleware
38 lines (37 loc) • 2.6 kB
TypeScript
import { ActionCreator, AnyAction, AsyncActionCreator } from './actions';
export declare function getType<TActionCreator extends {
toString(): string;
}, Type extends string = TActionCreator extends {
toString(): infer U;
} ? U : never>(actionCreator: TActionCreator): Type;
export declare type Handler<TPrevState, TAction, TNextState extends TPrevState = TPrevState> = (prevState: TPrevState, action: TAction) => TNextState;
export declare type HandlerMap<TPrevState, TAction extends AnyAction, TNextState extends TPrevState = TPrevState> = {
[type in TAction['type']]: Handler<TPrevState, TAction, TNextState>;
};
export declare type InferActionFromHandlerMap<THandlerMap extends HandlerMap<any, any>> = THandlerMap extends HandlerMap<any, infer T> ? T : never;
export declare type InferNextStateFromHandlerMap<THandlerMap extends HandlerMap<any, any>> = THandlerMap extends HandlerMap<any, any, infer T> ? T : never;
export declare type CreateHandlerMap<TPrevState> = <TActionCreator extends ActionCreator<AnyAction>, TNextState extends TPrevState, TAction extends AnyAction = TActionCreator extends (...args: any[]) => infer T ? T : never>(actionCreators: TActionCreator | TActionCreator[], handler: Handler<TPrevState, TAction, TNextState>) => HandlerMap<TPrevState, TAction, TNextState>;
export declare function createHandlerMap<TActionCreator extends ActionCreator<AnyAction>, TPrevState, TNextState extends TPrevState, TAction extends AnyAction = TActionCreator extends (...args: any[]) => infer T ? T : never>(actionCreators: TActionCreator | TActionCreator[], handler: Handler<TPrevState, TAction, TNextState>): HandlerMap<TPrevState, TAction, TNextState>;
export declare function createReducer<TState, THandlerMap extends HandlerMap<TState, any, any>>(defaultState: TState, handlerMapsCreator: (handle: CreateHandlerMap<TState>) => THandlerMap[]): (state: TState | undefined, action: InferActionFromHandlerMap<THandlerMap>) => InferNextStateFromHandlerMap<THandlerMap>;
export interface State<Payload> {
error?: Error;
data?: Payload;
date?: number;
pending?: boolean;
}
export declare const asyncReducer: <Type extends string, Payload, Metadata>(fn: AsyncActionCreator<Type, Payload, Metadata>) => (state: State<Payload> | undefined, action: any) => {
pending: true;
error?: Error | undefined;
data?: Payload | undefined;
date?: number | undefined;
} | {
pending: false;
error: undefined;
data: any;
date: number;
} | {
pending: false;
error: Error;
data?: Payload | undefined;
date?: number | undefined;
};