import type { Action, CaseReducer, PayloadAction } from '@reduxjs/toolkit';
/**
 * normal dva reducers object
 *
 * @public
 */
export declare type DvaReducers<State = any> = {
    [K: string]: CaseReducer<State, PayloadAction<any>>;
};
/**
 * dva enhancer support
 *
 * @public
 */
export declare 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 declare 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 declare 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 declare type ValidateDvaSliceCaseReducers<S, ACR extends DvaSliceCaseReducers<S>> = ACR & {
    [T in keyof ACR]: ACR[T] extends {
        reducer(s: S, action: any): any;
    } ? {} : {};
};
