dva-toolkit
Version:
A great dva typescript support toolkit inspired by @redux/toolkit
54 lines (48 loc) • 1.19 kB
text/typescript
import type { Action, CaseReducer, PayloadAction } from '@reduxjs/toolkit'
/**
* normal dva reducers object
*
* @public
*/
export type DvaReducers<State = any> = {
[K: string]: CaseReducer<State, PayloadAction<any>>
}
/**
* dva enhancer support
*
* @public
*/
export type DvaReducerEnhancer<
S = any,
R extends DvaReducers<S> = DvaReducers<S>,
A extends Action = PayloadAction<any>
> = (reducer: R[keyof R]) => (state: S, action: A) => ReturnType<CaseReducer<S>>
export type DvaReducersWithEnhancer<
S = any,
Reducers extends DvaReducers<S> = DvaReducers<S>,
ReducerEnhancer extends DvaReducerEnhancer<S, Reducers> = DvaReducerEnhancer<S, Reducers>
> = [Reducers, ReducerEnhancer]
/**
* dva config reducers type
*
* @public
*/
export type DvaSliceCaseReducers<
S = any,
Reducers extends DvaReducers<S> = DvaReducers<S>,
> = DvaReducersWithEnhancer<S, Reducers> | Reducers
/**
* valid dva reducers case
*
* TODO: try to understand this func
*/
export type ValidateDvaSliceCaseReducers<
S,
ACR extends DvaSliceCaseReducers<S>
> = ACR & {
[T in keyof ACR]: ACR[T] extends {
reducer(s: S, action: any): any
}
? {}
: {}
}