UNPKG

deox

Version:

Functional Type-safe Flux Standard Utilities

37 lines (36 loc) 3.29 kB
import { ActionCreator } from './create-action-creator'; import { AnyAction } from './create-action'; import { Handler } from './types'; export declare const othersHandlerKey: unique symbol; declare type CustomHandlerMap<TPrevState, TAction extends AnyAction, TNextState extends TPrevState = TPrevState> = { [type in TAction['type']]: Handler<TPrevState, TAction, TNextState>; }; declare type OthersHandlerMap<TPrevState, TAction extends AnyAction, TNextState extends TPrevState = TPrevState> = { [othersHandlerKey]: Handler<TPrevState, TAction, TNextState>; }; export declare type HandlerMap<TPrevState, TAction extends AnyAction, TNextState extends TPrevState = TPrevState> = CustomHandlerMap<TPrevState, TAction, TNextState> | OthersHandlerMap<TPrevState, TAction, TNextState>; export declare type MergedHandlerMap<TPrevState, TAction extends AnyAction, TNextState extends TPrevState = TPrevState> = CustomHandlerMap<TPrevState, TAction, TNextState> & OthersHandlerMap<TPrevState, TAction, TNextState>; export declare type InferActionFromHandlerMap<THandlerMap extends HandlerMap<any, any>> = THandlerMap extends CustomHandlerMap<any, infer T> ? T : never; export declare type InferNextStateFromHandlerMap<THandlerMap extends HandlerMap<any, any>> = THandlerMap extends CustomHandlerMap<any, any, infer T> ? T : never; declare type InferActionFromCreator<TActionCreator> = TActionCreator extends (...args: any[]) => infer T ? T : never; declare type CreateOthersHandler<TPrevState> = <TActionCreator extends ActionCreator<any>, TNextState extends TPrevState, TAction extends AnyAction = InferActionFromCreator<TActionCreator>>(handler: Handler<TPrevState, TAction, TNextState>) => OthersHandlerMap<TPrevState, TAction, TNextState>; declare type CreateCustomHandlerMap<TPrevState> = <TActionCreator extends ActionCreator<any>, TNextState extends TPrevState, TAction extends AnyAction = InferActionFromCreator<TActionCreator>>(actionCreators: TActionCreator | TActionCreator[], handler: Handler<TPrevState, TAction, TNextState>) => CustomHandlerMap<TPrevState, TAction, TNextState>; export declare type CreateHandlerMap<TPrevState> = CreateCustomHandlerMap<TPrevState> & { others: CreateOthersHandler<TPrevState>; }; /** * Handler map factory * @description create an action(s) to reducer map * @example * createHandlerMap(increment, (state: number) => state + 1) * @example * createHandlerMap([increment, increase], (state: number) => state + 1) * @example * createHandlerMap.others((state: number) => state + 1) */ export declare function createHandlerMap<TActionCreator extends ActionCreator<any>, TPrevState, TNextState extends TPrevState, TAction extends AnyAction = InferActionFromCreator<TActionCreator>>(actionCreators: TActionCreator | TActionCreator[], handler: Handler<TPrevState, TAction, TNextState>): CustomHandlerMap<TPrevState, TAction, TNextState>; export declare namespace createHandlerMap { var others: typeof createOthersHandlerMap; } declare function createOthersHandlerMap<TActionCreator extends ActionCreator<any>, TPrevState, TNextState extends TPrevState, TAction extends AnyAction = InferActionFromCreator<TActionCreator>>(handler: Handler<TPrevState, TAction, TNextState>): OthersHandlerMap<TPrevState, TAction, TNextState>; export {};