deox
Version:
Functional Type-safe Flux Standard Utilities
37 lines (36 loc) • 3.29 kB
TypeScript
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 {};