@@ -10,7 +10,12 @@ import type {
10
10
} from 'redux'
11
11
import { applyMiddleware , combineReducers } from 'redux'
12
12
import type { PayloadAction , ConfigureStoreOptions } from '@reduxjs/toolkit'
13
- import { configureStore , createSlice } from '@reduxjs/toolkit'
13
+ import {
14
+ configureStore ,
15
+ createSlice ,
16
+ MiddlewareArray ,
17
+ EnhancerArray ,
18
+ } from '@reduxjs/toolkit'
14
19
import type { ThunkMiddleware , ThunkAction , ThunkDispatch } from 'redux-thunk'
15
20
import { thunk } from 'redux-thunk'
16
21
import { expectNotAny , expectType } from './helpers'
@@ -67,20 +72,26 @@ const _anyMiddleware: any = () => () => () => {}
67
72
}
68
73
69
74
/*
70
- * Test: configureStore() accepts middleware array.
75
+ * Test: configureStore() accepts MiddlewareArray, but not plain array.
71
76
*/
72
77
{
73
78
const middleware : Middleware = ( store ) => ( next ) => next
74
79
75
80
configureStore ( {
76
81
reducer : ( ) => 0 ,
82
+ middleware : new MiddlewareArray ( middleware ) ,
83
+ } )
84
+
85
+ configureStore ( {
86
+ reducer : ( ) => 0 ,
87
+ // @ts -expect-error
77
88
middleware : [ middleware ] ,
78
89
} )
79
90
80
91
configureStore ( {
81
92
reducer : ( ) => 0 ,
82
93
// @ts -expect-error
83
- middleware : [ 'not middleware' ] ,
94
+ middleware : new MiddlewareArray ( 'not middleware' ) ,
84
95
} )
85
96
}
86
97
@@ -133,13 +144,21 @@ const _anyMiddleware: any = () => () => () => {}
133
144
}
134
145
135
146
/*
136
- * Test: configureStore() accepts store enhancer.
147
+ * Test: configureStore() accepts store EnhancerArray, but not plain array
137
148
*/
138
149
{
139
150
{
151
+ const enhancer = applyMiddleware ( ( ) => ( next ) => next )
152
+
140
153
const store = configureStore ( {
141
154
reducer : ( ) => 0 ,
142
- enhancers : [ applyMiddleware ( ( ) => ( next ) => next ) ] as const ,
155
+ enhancers : new EnhancerArray ( enhancer ) ,
156
+ } )
157
+
158
+ const store2 = configureStore ( {
159
+ reducer : ( ) => 0 ,
160
+ // @ts -expect-error
161
+ enhancers : [ enhancer ] ,
143
162
} )
144
163
145
164
expectType < Dispatch & ThunkDispatch < number , undefined , AnyAction > > (
@@ -150,7 +169,7 @@ const _anyMiddleware: any = () => () => () => {}
150
169
configureStore ( {
151
170
reducer : ( ) => 0 ,
152
171
// @ts -expect-error
153
- enhancers : [ 'not a store enhancer' ] ,
172
+ enhancers : new EnhancerArray ( 'not a store enhancer' ) ,
154
173
} )
155
174
156
175
{
@@ -178,10 +197,10 @@ const _anyMiddleware: any = () => () => () => {}
178
197
179
198
const store = configureStore ( {
180
199
reducer : ( ) => 0 ,
181
- enhancers : [
200
+ enhancers : new EnhancerArray (
182
201
somePropertyStoreEnhancer ,
183
- anotherPropertyStoreEnhancer ,
184
- ] as const ,
202
+ anotherPropertyStoreEnhancer
203
+ ) ,
185
204
} )
186
205
187
206
expectType < Dispatch > ( store . dispatch )
@@ -240,11 +259,10 @@ const _anyMiddleware: any = () => () => () => {}
240
259
241
260
const store = configureStore ( {
242
261
reducer : ( ) => ( { aProperty : 0 } ) ,
243
- enhancers : [
262
+ enhancers : new EnhancerArray (
244
263
someStateExtendingEnhancer ,
245
- anotherStateExtendingEnhancer ,
246
- // this doesn't work without the as const
247
- ] as const ,
264
+ anotherStateExtendingEnhancer
265
+ ) ,
248
266
} )
249
267
250
268
const state = store . getState ( )
@@ -512,7 +530,7 @@ const _anyMiddleware: any = () => () => () => {}
512
530
{
513
531
const store = configureStore ( {
514
532
reducer : reducerA ,
515
- middleware : [ ] ,
533
+ middleware : new MiddlewareArray ( ) ,
516
534
} )
517
535
// @ts -expect-error
518
536
store . dispatch ( thunkA ( ) )
@@ -525,7 +543,7 @@ const _anyMiddleware: any = () => () => () => {}
525
543
{
526
544
const store = configureStore ( {
527
545
reducer : reducerA ,
528
- middleware : [ thunk ] as [ ThunkMiddleware < StateA > ] ,
546
+ middleware : new MiddlewareArray ( thunk as ThunkMiddleware < StateA > ) ,
529
547
} )
530
548
store . dispatch ( thunkA ( ) )
531
549
// @ts -expect-error
@@ -537,21 +555,9 @@ const _anyMiddleware: any = () => () => () => {}
537
555
{
538
556
const store = configureStore ( {
539
557
reducer : reducerA ,
540
- middleware : [ ] as any as [ Middleware < ( a : StateA ) => boolean , StateA > ] ,
541
- } )
542
- const result : boolean = store . dispatch ( 5 )
543
- // @ts -expect-error
544
- const result2 : string = store . dispatch ( 5 )
545
- }
546
- /**
547
- * Test: read-only middleware tuple
548
- */
549
- {
550
- const store = configureStore ( {
551
- reducer : reducerA ,
552
- middleware : [ ] as any as readonly [
553
- Middleware < ( a : StateA ) => boolean , StateA >
554
- ] ,
558
+ middleware : new MiddlewareArray (
559
+ 0 as unknown as Middleware < ( a : StateA ) => boolean , StateA >
560
+ ) ,
555
561
} )
556
562
const result : boolean = store . dispatch ( 5 )
557
563
// @ts -expect-error
@@ -561,11 +567,13 @@ const _anyMiddleware: any = () => () => () => {}
561
567
* Test: multiple custom middleware
562
568
*/
563
569
{
564
- const middleware = [ ] as any as [
565
- Middleware < ( a : 'a' ) => 'A' , StateA > ,
566
- Middleware < ( b : 'b' ) => 'B' , StateA > ,
567
- ThunkMiddleware < StateA >
568
- ]
570
+ const middleware = [ ] as any as MiddlewareArray <
571
+ [
572
+ Middleware < ( a : 'a' ) => 'A' , StateA > ,
573
+ Middleware < ( b : 'b' ) => 'B' , StateA > ,
574
+ ThunkMiddleware < StateA >
575
+ ]
576
+ >
569
577
const store = configureStore ( {
570
578
reducer : reducerA ,
571
579
middleware,
0 commit comments