import { Draft, nothing } from 'immer';
import { Dispatch } from 'react';
export type ImmerReducer<S, A> = (draftState: Draft<S>, action: A) => void | (S extends undefined ? typeof nothing : S);
export declare function useImmerReducer<S, A, I>(reducer: ImmerReducer<S, A>, initializerArg: S & I, initializer: (arg: S & I) => S): [S, Dispatch<A>];
export declare function useImmerReducer<S, A, I>(reducer: ImmerReducer<S, A>, initializerArg: I, initializer: (arg: I) => S): [S, Dispatch<A>];
export declare function useImmerReducer<S, A>(reducer: ImmerReducer<S, A>, initialState: S, initializer?: undefined): [S, Dispatch<A>];
export default function useImmerReducer<S, A, I>(reducer: ImmerReducer<S, A>, initializerArg: S & I, initializer?: (arg: S & I) => S): [import("react").ReducerState<void | (S extends undefined ? typeof nothing : S) extends void | Draft<S> | (Draft<S> extends infer T ? T extends Draft<S> ? T extends undefined ? typeof nothing : never : never : never) | undefined ? (base: import("immer").Immutable<Draft<S>>, action: A) => Draft<S> : never>, Dispatch<import("react").ReducerAction<void | (S extends undefined ? typeof nothing : S) extends void | Draft<S> | (Draft<S> extends infer T ? T extends Draft<S> ? T extends undefined ? typeof nothing : never : never : never) | undefined ? (base: import("immer").Immutable<Draft<S>>, action: A) => Draft<S> : never>>];
