UNPKG

dva-toolkit

Version:

A great dva typescript support toolkit inspired by @redux/toolkit

49 lines (48 loc) 1.76 kB
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>;