Typescript: hvordan man typificerer en brugerdefineret redux-middleware, der håndterer asynkrone handlinger
Jeg håber, at alle har det godt denne weekend!
ansvarsfraskrivelse: Jeg har allerede forsket hele dagen, og jeg kommer for at bede om hjælp først efter, at jeg har prøvet mange ting, jeg har åbnet mere end 20 StackOverflow-links og læst dem igennem...
Jeg har dette brugerdefinerede redux-middleware, som har til formål at fange løfter, der mislykkes, og afsende en handling for hver.
const errorMiddleware: Middleware =
({ dispatch }: MiddlewareAPI) =>
(next: Dispatch) =>
async (action: AnyAction) => {
const { meta, payload } = action;
const { withErrorHandler, defaultErrorCode } = meta;
const isPromise = getIsPromise(payload);
if (isPromise && withErrorHandler) {
return next(action)
.catch(errorHandler(defaultErrorCode))
.catch((handledError: ISystemError) =>
Promise.reject(
handledError.shouldSkipHandleError
? handledError
: dispatch(addError(handledError))
)
);
}
return next(action);
};
problemet jeg prøver at løse er async (action: AnyAction) => {
Jeg får en fejlmeddelelse, der siger
Argument of type 'AsyncThunkAction<number, number, {}>' is not assignable to parameter of type 'AnyAction'.
Property 'type' is missing in type 'AsyncThunkAction<number, number, {}>' but required in type 'AnyAction'. TS2345
53 | <button
54 | className={styles.asyncButton}
> 55 | onClick={() => dispatch(incrementAsync(incrementValue))}
| ^
56 | >
57 | Add Async
58 | </button>
dette er fordi incrementAsync bruger createAsyncThunk fra '@reduxjs/toolkit';
export const incrementAsync = createAsyncThunk(
'counter/fetchCount',
async (amount: number) => {
const response = await fetchCount(amount);
// The value we return becomes the `fulfilled` action payload
return response.data;
}
);
Så jeg tror, jeg er nødt til at ændre den sidste funktion `async (action: AnyAction) => {` type af handling til noget andet, men jeg kan ikke finde ud af det, må jeg få oplysning fra dine ord?
her er et link til TypeScript-legeredet, hvis det hjælper
h
Svar #1
Prøv det med
const errorMiddleware: Middleware<{}, unknown, ThunkDispatch<unknown, unknown, AnyAction>> =
({ dispatch }) =>
(next) =>
async (action) => {
der er ingen grund til at skrive ting til venstre og højre for = - at skrive det på den ene side vil blive overført til den anden side.
