UNPKG

@reduxjs/toolkit

Version:

The official, opinionated, batteries-included toolset for efficient Redux development

85 lines (71 loc) 2.13 kB
import type { Reducer } from 'redux' import type { ActionReducerMapBuilder } from '@reduxjs/toolkit' import { createReducer, createAction } from '@reduxjs/toolkit' import { expectType } from './helpers' /* * Test: createReducer() infers type of returned reducer. */ { const incrementHandler = ( state: number, action: { type: 'increment'; payload: number } ) => state + 1 const decrementHandler = ( state: number, action: { type: 'decrement'; payload: number } ) => state - 1 const reducer = createReducer(0 as number, (builder) => { builder .addCase('increment', incrementHandler) .addCase('decrement', decrementHandler) }) const numberReducer: Reducer<number> = reducer // @ts-expect-error const stringReducer: Reducer<string> = reducer } /** * Test: createReducer() state type can be specified expliclity. */ { const incrementHandler = ( state: number, action: { type: 'increment'; payload: number } ) => state + action.payload const decrementHandler = ( state: number, action: { type: 'decrement'; payload: number } ) => state - action.payload createReducer(0 as number, (builder) => { builder .addCase('increment', incrementHandler) .addCase('decrement', decrementHandler) }) // @ts-expect-error createReducer<string>(0 as number, (builder) => { // @ts-expect-error builder .addCase('increment', incrementHandler) .addCase('decrement', decrementHandler) }) } /* * Test: createReducer() ensures state type is mutable within a case reducer. */ { const initialState: { readonly counter: number } = { counter: 0 } createReducer(initialState, (builder) => { builder.addCase('increment', (state) => { state.counter += 1 }) }) } /** Test: builder callback for actionMap */ { const increment = createAction<number, 'increment'>('increment') const reducer = createReducer(0, (builder) => expectType<ActionReducerMapBuilder<number>>(builder) ) expectType<number>(reducer(0, increment(5))) // @ts-expect-error expectType<string>(reducer(0, increment(5))) }