@@ -135,13 +135,13 @@ function replaceReducerExtender() {
135135
136136 const newStore = store . replaceReducer ( newReducer )
137137 newStore . getState ( ) . test
138- store . getState ( ) . extraField
138+ newStore . getState ( ) . extraField
139139 // typings:expect-error
140- store . getState ( ) . wrongField
140+ newStore . getState ( ) . wrongField
141141
142- const res : string = store . method ( )
142+ const res : string = newStore . method ( )
143143 // typings:expect-error
144- store . wrongMethod ( )
144+ newStore . wrongMethod ( )
145145}
146146
147147function mhelmersonExample ( ) {
@@ -206,24 +206,56 @@ function mhelmersonExample() {
206206
207207 const store = createStore ( reducer , enhancer )
208208 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
209226 }
210227}
211228
212229function 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+ }
215245 }
216246
217247 function persistStore < S > ( store : S ) {
218248 return store
219249 }
220250
221- function createPersistEnhancer ( persistConfig : any ) : StoreEnhancer {
251+ function createPersistEnhancer (
252+ persistConfig : any
253+ ) : StoreEnhancer < { } , ExtraState > {
222254 return createStore => < S , A extends Action = AnyAction > (
223255 reducer : Reducer < S , A > ,
224256 preloadedState ?: any
225257 ) => {
226- const persistedReducer = persistReducer ( persistConfig , reducer )
258+ const persistedReducer = persistReducer < S , A > ( persistConfig , reducer )
227259 const store = createStore ( persistedReducer , preloadedState )
228260 const persistor = persistStore ( store )
229261
@@ -238,4 +270,22 @@ function finalHelmersonExample() {
238270 }
239271 }
240272 }
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
241291}
0 commit comments