@@ -135,13 +135,13 @@ function replaceReducerExtender() {
135
135
136
136
const newStore = store . replaceReducer ( newReducer )
137
137
newStore . getState ( ) . test
138
- store . getState ( ) . extraField
138
+ newStore . getState ( ) . extraField
139
139
// typings:expect-error
140
- store . getState ( ) . wrongField
140
+ newStore . getState ( ) . wrongField
141
141
142
- const res : string = store . method ( )
142
+ const res : string = newStore . method ( )
143
143
// typings:expect-error
144
- store . wrongMethod ( )
144
+ newStore . wrongMethod ( )
145
145
}
146
146
147
147
function mhelmersonExample ( ) {
@@ -206,24 +206,56 @@ function mhelmersonExample() {
206
206
207
207
const store = createStore ( reducer , enhancer )
208
208
store . replaceReducer ( reducer )
209
+
210
+ store . getState ( ) . extraField
211
+ // typings:expect-error
212
+ store . getState ( ) . wrongField
213
+ // typings:expect-error
214
+ store . getState ( ) . test
215
+
216
+ const newReducer = (
217
+ state : { test : boolean } = { test : true } ,
218
+ _ : AnyAction
219
+ ) => state
220
+
221
+ const newStore = store . replaceReducer ( newReducer )
222
+ newStore . getState ( ) . test
223
+ newStore . getState ( ) . extraField
224
+ // typings:expect-error
225
+ newStore . getState ( ) . wrongField
209
226
}
210
227
}
211
228
212
229
function finalHelmersonExample ( ) {
213
- function persistReducer < S > ( config : any , reducer : S ) : S {
214
- return reducer
230
+ interface ExtraState {
231
+ foo : string
232
+ }
233
+
234
+ function persistReducer < S , A extends AnyAction > (
235
+ config : any ,
236
+ reducer : Reducer < S , A >
237
+ ) {
238
+ return ( state : S & ExtraState | undefined , action : AnyAction ) => {
239
+ const newState = reducer ( state , ( action as unknown ) as A )
240
+ return {
241
+ ...newState ,
242
+ foo : 'hi'
243
+ }
244
+ }
215
245
}
216
246
217
247
function persistStore < S > ( store : S ) {
218
248
return store
219
249
}
220
250
221
- function createPersistEnhancer ( persistConfig : any ) : StoreEnhancer {
251
+ function createPersistEnhancer (
252
+ persistConfig : any
253
+ ) : StoreEnhancer < { } , ExtraState > {
222
254
return createStore => < S , A extends Action = AnyAction > (
223
255
reducer : Reducer < S , A > ,
224
256
preloadedState ?: any
225
257
) => {
226
- const persistedReducer = persistReducer ( persistConfig , reducer )
258
+ const persistedReducer = persistReducer < S , A > ( persistConfig , reducer )
227
259
const store = createStore ( persistedReducer , preloadedState )
228
260
const persistor = persistStore ( store )
229
261
@@ -238,4 +270,22 @@ function finalHelmersonExample() {
238
270
}
239
271
}
240
272
}
273
+
274
+ const store = createStore ( reducer , createPersistEnhancer ( 'hi' ) )
275
+
276
+ store . getState ( ) . foo
277
+ // typings:expect-error
278
+ store . getState ( ) . wrongField
279
+
280
+ const newReducer = (
281
+ state : { test : boolean } = { test : true } ,
282
+ _ : AnyAction
283
+ ) => state
284
+
285
+ const newStore = store . replaceReducer ( newReducer )
286
+ newStore . getState ( ) . test
287
+ // typings:expect-error
288
+ newStore . getState ( ) . whatever
289
+ // typings:expect-error
290
+ newStore . getState ( ) . wrongField
241
291
}
0 commit comments