From d976ea501ff180228497cd0a0c1939c936f9483a Mon Sep 17 00:00:00 2001 From: Ben Durrant Date: Wed, 22 May 2024 11:13:47 +0100 Subject: [PATCH] move async thunk creator module augmentation --- packages/toolkit/src/asyncThunkCreator.ts | 48 ++++++++++++++++++++++- packages/toolkit/src/createSlice.ts | 35 ----------------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/packages/toolkit/src/asyncThunkCreator.ts b/packages/toolkit/src/asyncThunkCreator.ts index d0ae93ed7..52651b7a0 100644 --- a/packages/toolkit/src/asyncThunkCreator.ts +++ b/packages/toolkit/src/asyncThunkCreator.ts @@ -7,8 +7,54 @@ import type { } from './createAsyncThunk' import { createAsyncThunk } from './createAsyncThunk' import type { CaseReducer } from './createReducer' -import type { ReducerCreator, ReducerDefinition } from './createSlice' +import type { + CreatorCaseReducers, + ReducerCreator, + ReducerCreatorEntry, + ReducerDefinition, +} from './createSlice' import { ReducerType } from './createSlice' +import type { Id } from './tsHelpers' + +declare module '@reduxjs/toolkit' { + export interface SliceReducerCreators< + State, + CaseReducers extends CreatorCaseReducers, + Name extends string, + ReducerPath extends string, + > { + [ReducerType.asyncThunk]: ReducerCreatorEntry< + AsyncThunkCreator, + { + actions: { + [ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends AsyncThunkSliceReducerDefinition< + State, + infer ThunkArg, + infer Returned, + infer ThunkApiConfig + > + ? AsyncThunk + : never + } + caseReducers: { + [ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends AsyncThunkSliceReducerDefinition< + State, + any, + any, + any + > + ? Id< + Pick< + Required, + 'fulfilled' | 'rejected' | 'pending' | 'settled' + > + > + : never + } + } + > + } +} export interface AsyncThunkSliceReducerConfig< State, diff --git a/packages/toolkit/src/createSlice.ts b/packages/toolkit/src/createSlice.ts index 481a6d36d..1b3a09911 100644 --- a/packages/toolkit/src/createSlice.ts +++ b/packages/toolkit/src/createSlice.ts @@ -1,9 +1,5 @@ import type { Action, UnknownAction, Reducer } from 'redux' import type { Selector } from 'reselect' -import type { - AsyncThunkCreator, - AsyncThunkSliceReducerDefinition, -} from './asyncThunkCreator' import type { ActionCreatorWithoutPayload, PayloadAction, @@ -12,7 +8,6 @@ import type { _ActionCreatorWithPreparedPayload, } from './createAction' import { createAction } from './createAction' -import type { AsyncThunk } from './createAsyncThunk' import type { ActionMatcherDescriptionCollection, CaseReducer, @@ -135,36 +130,6 @@ export interface SliceReducerCreators< } } > - [ReducerType.asyncThunk]: ReducerCreatorEntry< - AsyncThunkCreator, - { - actions: { - [ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends AsyncThunkSliceReducerDefinition< - State, - infer ThunkArg, - infer Returned, - infer ThunkApiConfig - > - ? AsyncThunk - : never - } - caseReducers: { - [ReducerName in keyof CaseReducers]: CaseReducers[ReducerName] extends AsyncThunkSliceReducerDefinition< - State, - any, - any, - any - > - ? Id< - Pick< - Required, - 'fulfilled' | 'rejected' | 'pending' | 'settled' - > - > - : never - } - } - > } export type ReducerCreators<