Refs Should I useState or useReducer? How to implement useState with useReducer Trey’s blog post type Dispatch<A> = (value: A) => void type Reducer<S, A> = (prevState: S, action: A) => S type ReducerState<R extends Reducer<any, any>> = R extends Reducer<infer S, any> ? S : never type ReducerAction<R extends Reducer<any, any>> = R extends Reducer< any, infer A > ? A : never function useReducer<R extends Reducer<any, any>, I>( reducer: R, initializerArg: I & ReducerState<R>, initializer: (arg: I & ReducerState<R>) => ReducerState<R>, ): [ReducerState<R>, Dispatch<ReducerAction<R>>] function useReducer<R extends Reducer<any, any>, I>( reducer: R, initializerArg: I, initializer: (arg: I) => ReducerState<R>, ): [ReducerState<R>, Dispatch<ReducerAction<R>>] function useReducer<R extends Reducer<any, any>>( reducer: R, initialState: ReducerState<R>, initializer?: undefined, ): [ReducerState<R>, Dispatch<ReducerAction<R>>]