1 | import type { Reducer } from 'redux'
|
2 | import type { ActionReducerMapBuilder } from '@reduxjs/toolkit'
|
3 | import { createReducer, createAction } from '@reduxjs/toolkit'
|
4 | import { expectType } from './helpers'
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | {
|
10 | type CounterAction =
|
11 | | { type: 'increment'; payload: number }
|
12 | | { type: 'decrement'; payload: number }
|
13 |
|
14 | const incrementHandler = (state: number, action: CounterAction) => state + 1
|
15 | const decrementHandler = (state: number, action: CounterAction) => state - 1
|
16 |
|
17 | const reducer = createReducer(0 as number, {
|
18 | increment: incrementHandler,
|
19 | decrement: decrementHandler,
|
20 | })
|
21 |
|
22 | const numberReducer: Reducer<number> = reducer
|
23 |
|
24 |
|
25 | const stringReducer: Reducer<string> = reducer
|
26 | }
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | {
|
32 | type CounterAction =
|
33 | | { type: 'increment'; payload: number }
|
34 | | { type: 'decrement'; payload: number }
|
35 |
|
36 | const incrementHandler = (state: number, action: CounterAction) =>
|
37 | state + action.payload
|
38 |
|
39 | const decrementHandler = (state: number, action: CounterAction) =>
|
40 | state - action.payload
|
41 |
|
42 | createReducer<number>(0, {
|
43 | increment: incrementHandler,
|
44 | decrement: decrementHandler,
|
45 | })
|
46 |
|
47 |
|
48 | createReducer<string>(0, {
|
49 | increment: incrementHandler,
|
50 | decrement: decrementHandler,
|
51 | })
|
52 | }
|
53 |
|
54 |
|
55 |
|
56 |
|
57 | {
|
58 | const initialState: { readonly counter: number } = { counter: 0 }
|
59 |
|
60 | createReducer(initialState, {
|
61 | increment: (state) => {
|
62 | state.counter += 1
|
63 | },
|
64 | })
|
65 | }
|
66 |
|
67 |
|
68 | {
|
69 | const increment = createAction<number, 'increment'>('increment')
|
70 |
|
71 | const reducer = createReducer(0, (builder) =>
|
72 | expectType<ActionReducerMapBuilder<number>>(builder)
|
73 | )
|
74 |
|
75 | expectType<number>(reducer(0, increment(5)))
|
76 |
|
77 | expectType<string>(reducer(0, increment(5)))
|
78 | }
|