Skip to content

Commit e4e042d

Browse files
committedJun 23, 2025·
Merge branch 'entity-methods-creator' into per-slice-creator
2 parents fc7d5ed + 541e5ca commit e4e042d

File tree

5 files changed

+221
-276
lines changed

5 files changed

+221
-276
lines changed
 

‎packages/toolkit/src/asyncThunkCreator.ts

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,14 @@ import type {
77
} from './createAsyncThunk'
88
import { createAsyncThunk } from './createAsyncThunk'
99
import type { CaseReducer } from './createReducer'
10-
import type {
11-
CreatorCaseReducers,
12-
ReducerCreator,
13-
ReducerDefinition,
14-
} from './createSlice'
10+
import type { ReducerCreator, ReducerDefinition } from './createSlice'
1511
import { ReducerType } from './createSlice'
1612
import type { Id } from './tsHelpers'
1713

18-
export type AsyncThunkSliceReducerConfig<
14+
export type AsyncThunkSliceReducers<
1915
State,
20-
ThunkArg extends any,
21-
Returned = unknown,
16+
ThunkArg,
17+
Returned,
2218
ThunkApiConfig extends AsyncThunkConfig = {},
2319
> = {
2420
pending?: CaseReducer<
@@ -39,6 +35,14 @@ export type AsyncThunkSliceReducerConfig<
3935
AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected' | 'fulfilled']
4036
>
4137
>
38+
}
39+
40+
export type AsyncThunkSliceReducerConfig<
41+
State,
42+
ThunkArg,
43+
Returned,
44+
ThunkApiConfig extends AsyncThunkConfig = {},
45+
> = AsyncThunkSliceReducers<State, ThunkArg, Returned, ThunkApiConfig> & {
4246
options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>
4347
}
4448

@@ -116,41 +120,38 @@ export interface AsyncThunkCreator<
116120

117121
export type AsyncThunkCreatorExposes<
118122
State,
119-
CaseReducers extends CreatorCaseReducers<State>,
123+
Definition extends ReducerDefinition,
120124
> = {
121-
actions: {
122-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends AsyncThunkSliceReducerDefinition<
123-
State,
124-
infer ThunkArg,
125-
infer Returned,
126-
infer ThunkApiConfig
127-
>
128-
? AsyncThunk<Returned, ThunkArg, ThunkApiConfig>
129-
: never
130-
}
131-
caseReducers: {
132-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends AsyncThunkSliceReducerDefinition<
133-
State,
134-
any,
135-
any,
136-
any
137-
>
138-
? Id<
139-
Pick<
140-
Required<CaseReducers[ReducerName]>,
141-
'fulfilled' | 'rejected' | 'pending' | 'settled'
142-
>
125+
action: Definition extends AsyncThunkSliceReducerDefinition<
126+
State,
127+
infer ThunkArg,
128+
infer Returned,
129+
infer ThunkApiConfig
130+
>
131+
? AsyncThunk<Returned, ThunkArg, ThunkApiConfig>
132+
: never
133+
134+
caseReducer: Definition extends AsyncThunkSliceReducerDefinition<
135+
State,
136+
any,
137+
any,
138+
any
139+
>
140+
? Id<
141+
Pick<
142+
Required<Definition>,
143+
'fulfilled' | 'rejected' | 'pending' | 'settled'
143144
>
144-
: never
145-
}
145+
>
146+
: never
146147
}
147148

148149
export const asyncThunkCreator: ReducerCreator<ReducerType.asyncThunk> = {
149150
type: ReducerType.asyncThunk,
150151
create: /* @__PURE__ */ (() => {
151152
function asyncThunk(
152153
payloadCreator: AsyncThunkPayloadCreator<any, any>,
153-
config: AsyncThunkSliceReducerConfig<any, any>,
154+
config: AsyncThunkSliceReducerConfig<any, any, any>,
154155
): AsyncThunkSliceReducerDefinition<any, any> {
155156
return {
156157
_reducerDefinitionType: ReducerType.asyncThunk,

‎packages/toolkit/src/createSlice.ts

Lines changed: 94 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import type {
2929
IsAny,
3030
OverloadedReturnType,
3131
TypeGuard,
32-
UnionToIntersection,
3332
} from './tsHelpers'
3433
import { getOrInsertComputed } from './utils'
3534

@@ -40,115 +39,76 @@ export enum ReducerType {
4039
entityMethods = 'entityMethods',
4140
}
4241

43-
export type RegisteredReducerType = keyof SliceReducerCreators<
44-
any,
45-
any,
46-
any,
47-
any
48-
>
42+
export type RegisteredReducerType = keyof SliceReducerCreators<any, any, any>
4943

5044
export type ReducerDefinition<
5145
T extends RegisteredReducerType = RegisteredReducerType,
5246
> = {
5347
_reducerDefinitionType: T
5448
}
5549

56-
export type ReducerCreatorEntry<
57-
Create,
58-
Exposes extends {
59-
actions?: Record<string, unknown>
60-
caseReducers?: Record<string, unknown>
61-
} = {},
62-
> = {
63-
create: Create
64-
actions: Exposes extends { actions: NonNullable<unknown> }
65-
? Exposes['actions']
66-
: {}
67-
caseReducers: Exposes extends { caseReducers: NonNullable<unknown> }
68-
? Exposes['caseReducers']
69-
: {}
70-
}
71-
7250
export type CreatorCaseReducers<State> =
7351
| Record<string, ReducerDefinition>
7452
| SliceCaseReducers<State>
7553

7654
export interface SliceReducerCreators<
7755
State,
78-
CaseReducers extends CreatorCaseReducers<State>,
79-
Name extends string,
56+
SliceName extends string,
8057
ReducerPath extends string,
8158
> {
82-
[ReducerType.reducer]: ReducerCreatorEntry<
83-
{
84-
(
85-
caseReducer: CaseReducer<State, PayloadAction>,
86-
): CaseReducerDefinition<State, PayloadAction>
87-
<Payload = any>(
88-
caseReducer: CaseReducer<State, PayloadAction<Payload>>,
89-
): CaseReducerDefinition<State, PayloadAction<Payload>>
90-
},
91-
{
92-
actions: {
93-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends CaseReducer<
94-
State,
95-
any
96-
>
97-
? ActionCreatorForCaseReducer<
98-
CaseReducers[ReducerName],
99-
SliceActionType<Name, ReducerName>
100-
>
101-
: never
102-
}
103-
caseReducers: {
104-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends CaseReducer<
105-
State,
106-
any
107-
>
108-
? CaseReducers[ReducerName]
109-
: never
110-
}
111-
}
112-
>
113-
[ReducerType.reducerWithPrepare]: ReducerCreatorEntry<
114-
<Prepare extends PrepareAction<any>>(
115-
prepare: Prepare,
116-
reducer: CaseReducer<
117-
State,
118-
ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>
119-
>,
120-
) => PreparedCaseReducerDefinition<State, Prepare>,
121-
{
122-
actions: {
123-
[ReducerName in keyof CaseReducers as ReducerName]: CaseReducers[ReducerName] extends CaseReducerWithPrepare<
124-
State,
125-
any
59+
[ReducerType.reducer]: {
60+
(
61+
caseReducer: CaseReducer<State, PayloadAction>,
62+
): CaseReducerDefinition<State, PayloadAction>
63+
<Payload = any>(
64+
caseReducer: CaseReducer<State, PayloadAction<Payload>>,
65+
): CaseReducerDefinition<State, PayloadAction<Payload>>
66+
}
67+
[ReducerType.reducerWithPrepare]: <Prepare extends PrepareAction<any>>(
68+
prepare: Prepare,
69+
reducer: CaseReducer<
70+
State,
71+
ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>
72+
>,
73+
) => PreparedCaseReducerDefinition<State, Prepare>
74+
[ReducerType.asyncThunk]: AsyncThunkCreator<State>
75+
[ReducerType.entityMethods]: EntityMethodsCreator<State>
76+
}
77+
78+
export interface SliceReducerCreatorsExposes<
79+
State,
80+
SliceName extends string,
81+
ReducerPath extends string,
82+
ReducerName extends PropertyKey,
83+
Definition extends ReducerDefinition,
84+
> {
85+
[creatorType: PropertyKey]: {
86+
action?: NonNullable<unknown>
87+
caseReducer?: NonNullable<unknown>
88+
}
89+
[ReducerType.reducer]: {
90+
action: Definition extends CaseReducer<State, any>
91+
? ActionCreatorForCaseReducer<
92+
Definition,
93+
SliceActionType<SliceName, ReducerName>
12694
>
127-
? CaseReducers[ReducerName] extends { prepare: any }
128-
? ActionCreatorForCaseReducerWithPrepare<
129-
CaseReducers[ReducerName],
130-
SliceActionType<Name, ReducerName>
131-
>
132-
: never
133-
: never
134-
}
135-
caseReducers: {
136-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends CaseReducerWithPrepare<
137-
State,
138-
any
95+
: never
96+
caseReducer: Definition extends CaseReducer<State, any> ? Definition : never
97+
}
98+
[ReducerType.reducerWithPrepare]: {
99+
action: Definition extends { prepare: any }
100+
? NonNullable<
101+
ActionCreatorForCaseReducerWithPrepare<
102+
Definition,
103+
SliceActionType<SliceName, ReducerName>
104+
>
139105
>
140-
? CaseReducers[ReducerName] extends { reducer: infer Reducer }
141-
? Reducer
142-
: never
143-
: never
144-
}
145-
}
146-
>
147-
[ReducerType.asyncThunk]: ReducerCreatorEntry<
148-
AsyncThunkCreator<State>,
149-
AsyncThunkCreatorExposes<State, CaseReducers>
150-
>
151-
[ReducerType.entityMethods]: ReducerCreatorEntry<EntityMethodsCreator<State>>
106+
: never
107+
caseReducer: Definition extends PreparedCaseReducerDefinition<State, any>
108+
? Definition['reducer']
109+
: never
110+
}
111+
[ReducerType.asyncThunk]: AsyncThunkCreatorExposes<State, Definition>
152112
}
153113

154114
export type ReducerCreators<
@@ -157,32 +117,24 @@ export type ReducerCreators<
157117
ReducerPath extends string = Name,
158118
CreatorMap extends Record<string, RegisteredReducerType> = {},
159119
> = {
160-
reducer: SliceReducerCreators<
161-
State,
162-
any,
163-
Name,
164-
ReducerPath
165-
>[ReducerType.reducer]['create']
120+
reducer: SliceReducerCreators<State, Name, ReducerPath>[ReducerType.reducer]
166121
preparedReducer: SliceReducerCreators<
167122
State,
168-
any,
169123
Name,
170124
ReducerPath
171-
>[ReducerType.reducerWithPrepare]['create']
125+
>[ReducerType.reducerWithPrepare]
172126
} & {
173127
[CreatorName in keyof CreatorMap as SliceReducerCreators<
174128
State,
175-
never,
176129
Name,
177130
ReducerPath
178-
>[CreatorMap[CreatorName]]['create'] extends never
131+
>[CreatorMap[CreatorName]] extends never
179132
? never
180133
: CreatorName]: SliceReducerCreators<
181134
State,
182-
never,
183135
Name,
184136
ReducerPath
185-
>[CreatorMap[CreatorName]]['create']
137+
>[CreatorMap[CreatorName]]
186138
}
187139

188140
interface InternalReducerHandlingContext<State> {
@@ -317,14 +269,14 @@ type DefinitionFromValue<
317269

318270
type ReducerDefinitionsForType<Type extends RegisteredReducerType> = {
319271
[CreatorType in RegisteredReducerType]: DefinitionFromValue<
320-
SliceReducerCreators<any, any, any, any>[CreatorType]['create'],
272+
SliceReducerCreators<any, any, any>[CreatorType],
321273
Type
322274
>
323275
}[RegisteredReducerType]
324276

325277
export type ReducerCreator<Type extends RegisteredReducerType> = {
326278
type: Type
327-
create: SliceReducerCreators<any, any, any, any>[Type]['create']
279+
create: SliceReducerCreators<any, any, any>[Type]
328280
} & (ReducerDefinitionsForType<Type> extends never
329281
? {
330282
handle?<State>(
@@ -653,9 +605,15 @@ export type SliceActionType<
653605
ActionName extends keyof any,
654606
> = ActionName extends string | number ? `${SliceName}/${ActionName}` : string
655607

656-
type ConvertNeverKeysToUnknown<T> = T extends any
657-
? { [K in keyof T]: T[K] extends never ? unknown : T[K] }
658-
: never
608+
type TagAnonymousDefinition<
609+
Definition extends CreatorCaseReducers<any>[string],
610+
> = Definition extends ReducerDefinition
611+
? Definition
612+
: Definition extends CaseReducer<any, any>
613+
? Definition & ReducerDefinition<ReducerType.reducer>
614+
: Definition extends CaseReducerWithPrepare<any, any>
615+
? Definition & ReducerDefinition<ReducerType.reducerWithPrepare>
616+
: never
659617

660618
/**
661619
* Derives the slice's `actions` property from the `reducers` options
@@ -667,18 +625,21 @@ export type CaseReducerActions<
667625
SliceName extends string,
668626
ReducerPath extends string = SliceName,
669627
State = any,
670-
> = Id<
671-
UnionToIntersection<
672-
ConvertNeverKeysToUnknown<
673-
SliceReducerCreators<
628+
> = Id<{
629+
[ReducerName in keyof CaseReducers]: TagAnonymousDefinition<
630+
CaseReducers[ReducerName]
631+
> extends ReducerDefinition<infer Type>
632+
? SliceReducerCreatorsExposes<
674633
State,
675-
CaseReducers,
676634
SliceName,
677-
ReducerPath
678-
>[RegisteredReducerType]['actions']
679-
>
680-
>
681-
>
635+
ReducerPath,
636+
ReducerName,
637+
TagAnonymousDefinition<CaseReducers[ReducerName]>
638+
> extends Record<Type, { action: infer Action extends {} }>
639+
? Action
640+
: never
641+
: never
642+
}>
682643

683644
/**
684645
* Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`
@@ -715,18 +676,21 @@ type SliceDefinedCaseReducers<
715676
SliceName extends string = string,
716677
ReducerPath extends string = SliceName,
717678
State = any,
718-
> = Id<
719-
UnionToIntersection<
720-
ConvertNeverKeysToUnknown<
721-
SliceReducerCreators<
679+
> = Id<{
680+
[ReducerName in keyof CaseReducers]: TagAnonymousDefinition<
681+
CaseReducers[ReducerName]
682+
> extends ReducerDefinition<infer Type>
683+
? SliceReducerCreatorsExposes<
722684
State,
723-
CaseReducers,
724685
SliceName,
725-
ReducerPath
726-
>[RegisteredReducerType]['caseReducers']
727-
>
728-
>
729-
>
686+
ReducerPath,
687+
ReducerName,
688+
TagAnonymousDefinition<CaseReducers[ReducerName]>
689+
> extends Record<Type, { caseReducer: infer CaseReducer }>
690+
? CaseReducer
691+
: never
692+
: never
693+
}>
730694

731695
type RemappedSelector<S extends Selector, NewState> =
732696
S extends Selector<any, infer R, infer P>

‎packages/toolkit/src/index.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,16 +83,20 @@ export type {
8383
ReducerCreators,
8484
SliceSelectors,
8585
SliceReducerCreators,
86+
SliceReducerCreatorsExposes,
8687
ReducerDefinition,
87-
ReducerCreatorEntry,
8888
ReducerCreator,
8989
ReducerDetails,
9090
ReducerHandlingContext,
9191
SliceActionType,
9292
CaseReducerDefinition,
9393
PreparedCaseReducerDefinition,
9494
} from './createSlice'
95-
export type { AsyncThunkSliceReducerDefinition } from './asyncThunkCreator'
95+
export type {
96+
AsyncThunkSliceReducers,
97+
AsyncThunkSliceReducerConfig,
98+
AsyncThunkSliceReducerDefinition,
99+
} from './asyncThunkCreator'
96100
export type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware'
97101
export { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware'
98102
export {

‎packages/toolkit/src/tests/createSlice.test-d.ts

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ import type {
66
ActionCreatorWithPreparedPayload,
77
ActionCreatorWithoutPayload,
88
ActionReducerMapBuilder,
9-
CreatorCaseReducers,
109
PayloadAction,
1110
PayloadActionCreator,
1211
Reducer,
1312
ReducerCreator,
14-
ReducerCreatorEntry,
1513
ReducerCreators,
1614
ReducerDefinition,
1715
ReducerHandlingContext,
@@ -919,23 +917,24 @@ interface AddToastThunk<Name extends string, ReducerName extends PropertyKey> {
919917
declare module '@reduxjs/toolkit' {
920918
export interface SliceReducerCreators<
921919
State,
922-
CaseReducers extends CreatorCaseReducers<State>,
923-
Name extends string,
920+
SliceName extends string,
924921
ReducerPath extends string,
925922
> {
926-
[toasterCreatorType]: ReducerCreatorEntry<
927-
State extends ToastState
928-
? () => ReducerDefinition<typeof toasterCreatorType>
929-
: never,
930-
{
931-
actions: {
932-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends ReducerDefinition<
933-
typeof toasterCreatorType
934-
>
935-
? AddToastThunk<Name, ReducerName>
936-
: never
937-
}
938-
}
939-
>
923+
[toasterCreatorType]: State extends ToastState
924+
? () => ReducerDefinition<typeof toasterCreatorType>
925+
: never
926+
}
927+
export interface SliceReducerCreatorsExposes<
928+
State,
929+
SliceName extends string,
930+
ReducerPath extends string,
931+
ReducerName extends PropertyKey,
932+
Definition extends ReducerDefinition,
933+
> {
934+
[toasterCreatorType]: {
935+
action: Definition extends ReducerDefinition<typeof toasterCreatorType>
936+
? AddToastThunk<SliceName, ReducerName>
937+
: never
938+
}
940939
}
941940
}

‎packages/toolkit/src/tests/createSlice.test.ts

Lines changed: 69 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@ import type {
55
Action,
66
CaseReducer,
77
CaseReducerDefinition,
8-
CreatorCaseReducers,
98
PayloadAction,
109
PayloadActionCreator,
1110
ReducerCreator,
12-
ReducerCreatorEntry,
1311
ReducerCreators,
1412
ReducerDefinition,
1513
ReducerHandlingContext,
@@ -1237,101 +1235,80 @@ type PatchThunk<
12371235
declare module '@reduxjs/toolkit' {
12381236
export interface SliceReducerCreators<
12391237
State,
1240-
CaseReducers extends CreatorCaseReducers<State>,
1241-
Name extends string,
1238+
SliceName extends string,
12421239
ReducerPath extends string,
12431240
> {
1244-
[loaderCreatorType]: ReducerCreatorEntry<
1245-
(
1246-
reducers: Pick<LoaderReducerDefinition<State>, 'ended' | 'started'>,
1247-
) => LoaderReducerDefinition<State>,
1248-
{
1249-
actions: {
1250-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends ReducerDefinition<
1251-
typeof loaderCreatorType
1252-
>
1253-
? LoaderThunk<Name, ReducerName>
1254-
: never
1255-
}
1256-
caseReducers: {
1257-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends ReducerDefinition<
1258-
typeof loaderCreatorType
1259-
>
1260-
? Required<
1261-
Pick<LoaderReducerDefinition<State>, 'ended' | 'started'>
1262-
>
1263-
: never
1264-
}
1265-
}
1266-
>
1267-
[historyMethodsCreatorType]: ReducerCreatorEntry<
1268-
State extends HistoryState<unknown>
1269-
? (this: ReducerCreators<State>) => {
1270-
undo: CaseReducerDefinition<State, PayloadAction>
1271-
redo: CaseReducerDefinition<State, PayloadAction>
1272-
reset: ReducerDefinition<typeof historyMethodsCreatorType> & {
1273-
type: 'reset'
1274-
}
1241+
[loaderCreatorType]: (
1242+
reducers: Pick<LoaderReducerDefinition<State>, 'ended' | 'started'>,
1243+
) => LoaderReducerDefinition<State>
1244+
[historyMethodsCreatorType]: State extends HistoryState<unknown>
1245+
? (this: ReducerCreators<State>) => {
1246+
undo: CaseReducerDefinition<State, PayloadAction>
1247+
redo: CaseReducerDefinition<State, PayloadAction>
1248+
reset: ReducerDefinition<typeof historyMethodsCreatorType> & {
1249+
type: 'reset'
12751250
}
1276-
: never,
1277-
{
1278-
actions: {
1279-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends ReducerDefinition<
1280-
typeof historyMethodsCreatorType
1281-
> & { type: 'reset' }
1282-
? PayloadActionCreator<void, SliceActionType<Name, ReducerName>>
1283-
: never
12841251
}
1285-
caseReducers: {
1286-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends ReducerDefinition<
1287-
typeof historyMethodsCreatorType
1288-
> & { type: 'reset' }
1289-
? CaseReducer<State, PayloadAction>
1290-
: never
1291-
}
1292-
}
1293-
>
1294-
[undoableCreatorType]: ReducerCreatorEntry<
1295-
State extends HistoryState<infer Data>
1296-
? {
1297-
<A extends Action & { meta?: UndoableOptions }>(
1298-
this: ReducerCreators<State>,
1299-
reducer: CaseReducer<Data, NoInfer<A>>,
1300-
): CaseReducer<State, A>
1301-
withoutPayload(): (options?: UndoableOptions) => {
1302-
payload: undefined
1303-
meta: UndoableOptions | undefined
1304-
}
1305-
withPayload<P>(): (
1306-
...args: IfMaybeUndefined<
1307-
P,
1308-
[payload?: P, options?: UndoableOptions],
1309-
[payload: P, options?: UndoableOptions]
1310-
>
1311-
) => { payload: P; meta: UndoableOptions | undefined }
1252+
: never
1253+
[undoableCreatorType]: State extends HistoryState<infer Data>
1254+
? {
1255+
<A extends Action & { meta?: UndoableOptions }>(
1256+
this: ReducerCreators<State>,
1257+
reducer: CaseReducer<Data, NoInfer<A>>,
1258+
): CaseReducer<State, A>
1259+
withoutPayload(): (options?: UndoableOptions) => {
1260+
payload: undefined
1261+
meta: UndoableOptions | undefined
13121262
}
1313-
: never
1314-
>
1315-
[patchCreatorType]: ReducerCreatorEntry<
1316-
State extends Objectish
1317-
? ReducerDefinition<typeof patchCreatorType>
1318-
: never,
1319-
{
1320-
actions: {
1321-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends ReducerDefinition<
1322-
typeof patchCreatorType
1323-
>
1324-
? PatchThunk<Name, ReducerName, ReducerPath, State>
1325-
: never
1326-
}
1327-
caseReducers: {
1328-
[ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends ReducerDefinition<
1329-
typeof patchCreatorType
1330-
>
1331-
? CaseReducer<State, PayloadAction<Patch[]>>
1332-
: never
1263+
withPayload<P>(): (
1264+
...args: IfMaybeUndefined<
1265+
P,
1266+
[payload?: P, options?: UndoableOptions],
1267+
[payload: P, options?: UndoableOptions]
1268+
>
1269+
) => { payload: P; meta: UndoableOptions | undefined }
13331270
}
1334-
}
1335-
>
1271+
: never
1272+
[patchCreatorType]: State extends Objectish
1273+
? ReducerDefinition<typeof patchCreatorType>
1274+
: never
1275+
}
1276+
export interface SliceReducerCreatorsExposes<
1277+
State,
1278+
SliceName extends string,
1279+
ReducerPath extends string,
1280+
ReducerName extends PropertyKey,
1281+
Definition extends ReducerDefinition,
1282+
> {
1283+
[loaderCreatorType]: {
1284+
action: Definition extends ReducerDefinition<typeof loaderCreatorType>
1285+
? LoaderThunk<SliceName, ReducerName>
1286+
: never
1287+
caseReducer: Definition extends ReducerDefinition<
1288+
typeof loaderCreatorType
1289+
>
1290+
? Required<Pick<LoaderReducerDefinition<State>, 'ended' | 'started'>>
1291+
: never
1292+
}
1293+
[historyMethodsCreatorType]: {
1294+
action: Definition extends ReducerDefinition<
1295+
typeof historyMethodsCreatorType
1296+
> & { type: 'reset' }
1297+
? PayloadActionCreator<void, SliceActionType<SliceName, ReducerName>>
1298+
: never
1299+
caseReducer: Definition extends ReducerDefinition<
1300+
typeof historyMethodsCreatorType
1301+
> & { type: 'reset' }
1302+
? CaseReducer<State, PayloadAction>
1303+
: never
1304+
}
1305+
[patchCreatorType]: {
1306+
action: Definition extends ReducerDefinition<typeof patchCreatorType>
1307+
? PatchThunk<SliceName, ReducerName, ReducerPath, State>
1308+
: never
1309+
caseReducer: Definition extends ReducerDefinition<typeof patchCreatorType>
1310+
? CaseReducer<State, PayloadAction<Patch[]>>
1311+
: never
1312+
}
13361313
}
13371314
}

0 commit comments

Comments
 (0)
Please sign in to comment.