dva-toolkit
Version:
A great dva typescript support toolkit inspired by @redux/toolkit
49 lines (48 loc) • 1.76 kB
TypeScript
import { ActionCreatorWithoutPayload, ActionCreatorWithPayload } from '@reduxjs/toolkit';
import { DvaCaseEffectWithType, DvaSliceCaseEffects } from './effects';
import { DvaReducers, DvaSliceCaseReducers } from './reducers';
/**
* dva reducer function => action
*
* @typeParam R reducer
* @public
*/
export declare type ActionCreatorDvaCaseReducer<R> = R extends (state: any, action: infer Action) => any ? Action extends {
payload: infer P;
} ? ActionCreatorWithPayload<P> : ActionCreatorWithoutPayload : ActionCreatorWithoutPayload;
/**
* dva reducer actions creator
*
* @public
*/
export declare type ActionCreatorDvaReducers<Reducers extends DvaReducers> = {
[Type in keyof Reducers]: ActionCreatorDvaCaseReducer<Reducers[Type]>;
};
/**
* dva reducer actions
*
* @public
*/
export declare type DvaReducersAction<CR extends DvaSliceCaseReducers> = CR extends DvaSliceCaseReducers<any, infer Reducers> ? ActionCreatorDvaReducers<Reducers> : never;
/**
* dva effects actions creator
*
* @public
*/
export declare type ActionCreatorDvaEffect<E> = E extends (action: infer Action, effects: any) => any ? Action extends {
payload: infer P;
} ? ActionCreatorWithPayload<P> : ActionCreatorWithoutPayload : ActionCreatorWithoutPayload;
/**
* dva effects actions
*
* @public
*/
export declare type DvaEffectsAction<CE extends DvaSliceCaseEffects> = {
[Type in keyof CE]: CE[Type] extends DvaCaseEffectWithType ? ActionCreatorDvaEffect<CE[Type][0]> : ActionCreatorDvaEffect<CE[Type]>;
};
/**
* dva actions
*
* @public
*/
export declare type DvaCaseAction<CR extends DvaSliceCaseReducers<any>, CE extends DvaSliceCaseEffects> = DvaReducersAction<CR> & DvaEffectsAction<CE>;