Skip to content

Commit b1f3bb0

Browse files
export AsyncThunkPayloadCreator type (#512)
* export AsyncThunkPayloadCreator type * Fix typo in type name Co-authored-by: Mark Erikson <mark@isquaredsoftware.com>
1 parent e56246d commit b1f3bb0

File tree

3 files changed

+37
-8
lines changed

3 files changed

+37
-8
lines changed

etc/redux-toolkit.api.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ export interface ActionReducerMapBuilder<State> {
5959
// @public @deprecated
6060
export type Actions<T extends keyof any = string> = Record<T, Action>;
6161

62+
// @public
63+
export type AsyncThunkPayloadCreator<Returned, ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = (arg: ThunkArg, thunkAPI: GetThunkAPI<ThunkApiConfig>) => AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig>;
64+
65+
// @public
66+
export type AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig extends AsyncThunkConfig> = Promise<Returned | RejectWithValue<GetRejectValue<ThunkApiConfig>>> | Returned | RejectWithValue<GetRejectValue<ThunkApiConfig>>;
67+
6268
// @public
6369
export type CaseReducer<S = any, A extends Action = AnyAction> = (state: Draft<S>, action: A) => S | void;
6470

@@ -105,7 +111,7 @@ export function createAction<P = void, T extends string = string>(type: T): Payl
105111
export function createAction<PA extends PrepareAction<any>, T extends string = string>(type: T, prepareAction: PA): PayloadActionCreator<ReturnType<PA>['payload'], T, PA>;
106112

107113
// @public (undocumented)
108-
export function createAsyncThunk<Returned, ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}>(type: string, payloadCreator: (arg: ThunkArg, thunkAPI: GetThunkAPI<ThunkApiConfig>) => Promise<Returned | RejectWithValue<GetRejectValue<ThunkApiConfig>>> | Returned | RejectWithValue<GetRejectValue<ThunkApiConfig>>): ((arg: ThunkArg) => (dispatch: GetDispatch<ThunkApiConfig>, getState: () => GetState<ThunkApiConfig>, extra: GetExtra<ThunkApiConfig>) => Promise<PayloadAction<Returned, string, {
114+
export function createAsyncThunk<Returned, ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}>(type: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>): ((arg: ThunkArg) => (dispatch: GetDispatch<ThunkApiConfig>, getState: () => GetState<ThunkApiConfig>, extra: GetExtra<ThunkApiConfig>) => Promise<PayloadAction<Returned, string, {
109115
arg: ThunkArg;
110116
requestId: string;
111117
}, never> | PayloadAction<GetRejectValue<ThunkApiConfig> | undefined, string, {

src/createAsyncThunk.ts

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,33 @@ type GetRejectValue<ThunkApiConfig> = ThunkApiConfig extends {
102102
}
103103
? RejectValue
104104
: unknown
105+
/**
106+
* A type describing the return value of the `payloadCreator` argument to `createAsyncThunk`.
107+
* Might be useful for wrapping `createAsyncThunk` in custom abstractions.
108+
*
109+
* @public
110+
*/
111+
export type AsyncThunkPayloadCreatorReturnValue<
112+
Returned,
113+
ThunkApiConfig extends AsyncThunkConfig
114+
> =
115+
| Promise<Returned | RejectWithValue<GetRejectValue<ThunkApiConfig>>>
116+
| Returned
117+
| RejectWithValue<GetRejectValue<ThunkApiConfig>>
118+
/**
119+
* A type describing the `payloadCreator` argument to `createAsyncThunk`.
120+
* Might be useful for wrapping `createAsyncThunk` in custom abstractions.
121+
*
122+
* @public
123+
*/
124+
export type AsyncThunkPayloadCreator<
125+
Returned,
126+
ThunkArg = void,
127+
ThunkApiConfig extends AsyncThunkConfig = {}
128+
> = (
129+
arg: ThunkArg,
130+
thunkAPI: GetThunkAPI<ThunkApiConfig>
131+
) => AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig>
105132

106133
/**
107134
*
@@ -116,13 +143,7 @@ export function createAsyncThunk<
116143
ThunkApiConfig extends AsyncThunkConfig = {}
117144
>(
118145
type: string,
119-
payloadCreator: (
120-
arg: ThunkArg,
121-
thunkAPI: GetThunkAPI<ThunkApiConfig>
122-
) =>
123-
| Promise<Returned | RejectWithValue<GetRejectValue<ThunkApiConfig>>>
124-
| Returned
125-
| RejectWithValue<GetRejectValue<ThunkApiConfig>>
146+
payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>
126147
) {
127148
type RejectedValue = GetRejectValue<ThunkApiConfig>
128149

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ export {
9696
} from './entities/models'
9797

9898
export {
99+
AsyncThunkPayloadCreatorReturnValue,
100+
AsyncThunkPayloadCreator,
99101
createAsyncThunk,
100102
unwrapResult,
101103
SerializedError

0 commit comments

Comments
 (0)