@@ -32,7 +32,12 @@ export enum ReducerType {
32
32
asyncThunk = 'asyncThunk' ,
33
33
}
34
34
35
- export type RegisteredReducerType = keyof SliceReducerCreators < any , any , any >
35
+ export type RegisteredReducerType = keyof SliceReducerCreators <
36
+ any ,
37
+ any ,
38
+ any ,
39
+ any
40
+ >
36
41
37
42
export interface ReducerDefinition <
38
43
T extends RegisteredReducerType = RegisteredReducerType ,
@@ -64,6 +69,7 @@ export interface SliceReducerCreators<
64
69
State ,
65
70
CaseReducers extends CreatorCaseReducers < State > ,
66
71
Name extends string ,
72
+ ReducerPath extends string ,
67
73
> {
68
74
[ ReducerType . reducer ] : ReducerCreatorEntry <
69
75
{
@@ -164,22 +170,36 @@ export interface SliceReducerCreators<
164
170
165
171
export type ReducerCreators <
166
172
State ,
173
+ Name extends string = string ,
174
+ ReducerPath extends string = Name ,
167
175
CreatorMap extends Record < string , RegisteredReducerType > = { } ,
168
176
> = {
169
- reducer : SliceReducerCreators < State , any , any > [ ReducerType . reducer ] [ 'create' ]
177
+ reducer : SliceReducerCreators <
178
+ State ,
179
+ any ,
180
+ Name ,
181
+ ReducerPath
182
+ > [ ReducerType . reducer ] [ 'create' ]
170
183
preparedReducer : SliceReducerCreators <
171
184
State ,
172
185
any ,
173
- any
186
+ Name ,
187
+ ReducerPath
174
188
> [ ReducerType . reducerWithPrepare ] [ 'create' ]
175
189
} & {
176
- [ Name in keyof CreatorMap as SliceReducerCreators <
190
+ [ CreatorName in keyof CreatorMap as SliceReducerCreators <
177
191
State ,
178
192
any ,
179
- any
180
- > [ CreatorMap [ Name ] ] [ 'create' ] extends never
193
+ Name ,
194
+ ReducerPath
195
+ > [ CreatorMap [ CreatorName ] ] [ 'create' ] extends never
181
196
? never
182
- : Name ] : SliceReducerCreators < State , any , any > [ CreatorMap [ Name ] ] [ 'create' ]
197
+ : CreatorName ] : SliceReducerCreators <
198
+ State ,
199
+ any ,
200
+ Name ,
201
+ ReducerPath
202
+ > [ CreatorMap [ CreatorName ] ] [ 'create' ]
183
203
}
184
204
185
205
interface InternalReducerHandlingContext < State > {
@@ -192,8 +212,8 @@ interface InternalReducerHandlingContext<State> {
192
212
193
213
export interface ReducerHandlingContext <
194
214
State ,
195
- Name extends string ,
196
- ReducerPath extends string ,
215
+ Name extends string = string ,
216
+ ReducerPath extends string = Name ,
197
217
> {
198
218
/**
199
219
* Adds a case reducer to handle a single action type.
@@ -317,15 +337,19 @@ type RecursiveExtractDefinition<
317
337
type ReducerDefinitionsForType < Type extends RegisteredReducerType > = {
318
338
[ CreatorType in RegisteredReducerType ] :
319
339
| RecursiveExtractDefinition <
320
- ReturnType < SliceReducerCreators < any , any , any > [ CreatorType ] [ 'create' ] > ,
340
+ ReturnType <
341
+ SliceReducerCreators < any , any , any , any > [ CreatorType ] [ 'create' ]
342
+ > ,
321
343
Type
322
344
>
323
345
| {
324
346
[ K in keyof SliceReducerCreators <
347
+ any ,
325
348
any ,
326
349
any ,
327
350
any
328
351
> [ CreatorType ] [ 'create' ] ] : SliceReducerCreators <
352
+ any ,
329
353
any ,
330
354
any ,
331
355
any
@@ -334,12 +358,12 @@ type ReducerDefinitionsForType<Type extends RegisteredReducerType> = {
334
358
) => infer Definitions
335
359
? RecursiveExtractDefinition < Definitions , Type >
336
360
: never
337
- } [ keyof SliceReducerCreators < any , any , any > [ CreatorType ] [ 'create' ] ]
338
- } [ keyof SliceReducerCreators < any , any , any > ]
361
+ } [ keyof SliceReducerCreators < any , any , any , any > [ CreatorType ] [ 'create' ] ]
362
+ } [ RegisteredReducerType ]
339
363
340
364
export type ReducerCreator < Type extends RegisteredReducerType > = {
341
365
type : Type
342
- create : SliceReducerCreators < any , any , any > [ Type ] [ 'create' ]
366
+ create : SliceReducerCreators < any , any , any , any > [ Type ] [ 'create' ]
343
367
} & ( ReducerDefinitionsForType < Type > extends never
344
368
? { }
345
369
: {
@@ -385,13 +409,13 @@ export interface Slice<
385
409
* Action creators for the types of actions that are handled by the slice
386
410
* reducer.
387
411
*/
388
- actions : CaseReducerActions < CaseReducers , Name , State >
412
+ actions : CaseReducerActions < CaseReducers , Name , ReducerPath , State >
389
413
390
414
/**
391
415
* The individual case reducer functions that were passed in the `reducers` parameter.
392
416
* This enables reuse and testing if they were defined inline when calling `createSlice`.
393
417
*/
394
- caseReducers : SliceDefinedCaseReducers < CaseReducers , Name , State >
418
+ caseReducers : SliceDefinedCaseReducers < CaseReducers , Name , ReducerPath , State >
395
419
396
420
/**
397
421
* Provides access to the initial state value given to the slice.
@@ -492,16 +516,25 @@ interface InjectedSlice<
492
516
493
517
type CreatorCallback <
494
518
State ,
519
+ Name extends string ,
520
+ ReducerPath extends string ,
495
521
CreatorMap extends Record < string , RegisteredReducerType > ,
496
522
> = (
497
- create : ReducerCreators < State , CreatorMap > ,
523
+ create : ReducerCreators < State , Name , ReducerPath , CreatorMap > ,
498
524
) => Record < string , ReducerDefinition >
499
525
500
526
type GetCaseReducers <
501
527
State ,
528
+ Name extends string ,
529
+ ReducerPath extends string ,
502
530
CreatorMap extends Record < string , RegisteredReducerType > ,
503
- CR extends SliceCaseReducers < State > | CreatorCallback < State , CreatorMap > ,
504
- > = CR extends CreatorCallback < State , CreatorMap > ? ReturnType < CR > : CR
531
+ CR extends
532
+ | SliceCaseReducers < State >
533
+ | CreatorCallback < State , Name , ReducerPath , CreatorMap > ,
534
+ > =
535
+ CR extends CreatorCallback < State , Name , ReducerPath , CreatorMap >
536
+ ? ReturnType < CR >
537
+ : CR
505
538
506
539
/**
507
540
* Options for `createSlice()`.
@@ -512,7 +545,12 @@ export interface CreateSliceOptions<
512
545
State = any ,
513
546
CR extends
514
547
| SliceCaseReducers < State >
515
- | CreatorCallback < State , CreatorMap > = SliceCaseReducers < State > ,
548
+ | CreatorCallback <
549
+ State ,
550
+ Name ,
551
+ ReducerPath ,
552
+ CreatorMap
553
+ > = SliceCaseReducers < State > ,
516
554
Name extends string = string ,
517
555
ReducerPath extends string = Name ,
518
556
Selectors extends SliceSelectors < State > = SliceSelectors < State > ,
@@ -658,14 +696,16 @@ type ConvertNeverKeysToUnknown<T> = T extends any
658
696
export type CaseReducerActions <
659
697
CaseReducers extends CreatorCaseReducers < State > ,
660
698
SliceName extends string ,
699
+ ReducerPath extends string = SliceName ,
661
700
State = any ,
662
701
> = Id <
663
702
UnionToIntersection <
664
703
ConvertNeverKeysToUnknown <
665
704
SliceReducerCreators <
666
705
State ,
667
706
CaseReducers ,
668
- SliceName
707
+ SliceName ,
708
+ ReducerPath
669
709
> [ RegisteredReducerType ] [ 'actions' ]
670
710
>
671
711
>
@@ -704,14 +744,16 @@ type ActionCreatorForCaseReducer<CR, Type extends string> = CR extends (
704
744
type SliceDefinedCaseReducers <
705
745
CaseReducers extends CreatorCaseReducers < State > ,
706
746
SliceName extends string = string ,
747
+ ReducerPath extends string = SliceName ,
707
748
State = any ,
708
749
> = Id <
709
750
UnionToIntersection <
710
751
ConvertNeverKeysToUnknown <
711
752
SliceReducerCreators <
712
753
State ,
713
754
CaseReducers ,
714
- SliceName
755
+ SliceName ,
756
+ ReducerPath
715
757
> [ RegisteredReducerType ] [ 'caseReducers' ]
716
758
>
717
759
>
@@ -752,7 +794,7 @@ type SliceDefinedSelectors<
752
794
*/
753
795
export type ValidateSliceCaseReducers <
754
796
S ,
755
- ACR extends SliceCaseReducers < S > | CreatorCallback < S , any > ,
797
+ ACR extends SliceCaseReducers < S > | CreatorCallback < S , any , any , any > ,
756
798
> = ACR & {
757
799
[ T in keyof ACR ] : ACR [ T ] extends {
758
800
reducer ( s : S , action ?: infer A ) : any
@@ -809,12 +851,9 @@ export const preparedReducerCreator: ReducerCreator<ReducerType.reducerWithPrepa
809
851
} ,
810
852
}
811
853
812
- const isCreatorCallback = <
813
- State ,
814
- CreatorMap extends Record < string , RegisteredReducerType > ,
815
- > (
816
- reducers : any ,
817
- ) : reducers is CreatorCallback < State , CreatorMap > =>
854
+ const isCreatorCallback = (
855
+ reducers : unknown ,
856
+ ) : reducers is CreatorCallback < any , any , any , any > =>
818
857
typeof reducers === 'function'
819
858
820
859
interface BuildCreateSliceConfig <
@@ -881,7 +920,7 @@ export function buildCreateSlice<
881
920
State ,
882
921
CaseReducers extends
883
922
| SliceCaseReducers < State >
884
- | CreatorCallback < State , CreatorMap > ,
923
+ | CreatorCallback < State , Name , ReducerPath , CreatorMap > ,
885
924
Name extends string ,
886
925
Selectors extends SliceSelectors < State > ,
887
926
ReducerPath extends string = Name ,
@@ -896,7 +935,7 @@ export function buildCreateSlice<
896
935
> ,
897
936
) : Slice <
898
937
State ,
899
- GetCaseReducers < State , CreatorMap , CaseReducers > ,
938
+ GetCaseReducers < State , Name , ReducerPath , CreatorMap , CaseReducers > ,
900
939
Name ,
901
940
ReducerPath ,
902
941
Selectors
@@ -1097,7 +1136,7 @@ export function buildCreateSlice<
1097
1136
) : Pick <
1098
1137
Slice <
1099
1138
State ,
1100
- GetCaseReducers < State , CreatorMap , CaseReducers > ,
1139
+ GetCaseReducers < State , Name , ReducerPath , CreatorMap , CaseReducers > ,
1101
1140
Name ,
1102
1141
CurrentReducerPath ,
1103
1142
Selectors
@@ -1153,7 +1192,7 @@ export function buildCreateSlice<
1153
1192
1154
1193
const slice : Slice <
1155
1194
State ,
1156
- CaseReducers extends CreatorCallback < State , CreatorMap >
1195
+ CaseReducers extends CreatorCallback < State , Name , ReducerPath , CreatorMap >
1157
1196
? ReturnType < CaseReducers >
1158
1197
: CaseReducers ,
1159
1198
Name ,
0 commit comments