#typescript #middleware #redux-toolkit #redux-middleware
Вопрос:
Я надеюсь, что все отлично проведут эти выходные!
отказ от ответственности: Я уже исследовал весь день и прихожу просить о помощи только после того, как перепробовал много вещей, открыл более 20 ссылок на StackOverflow и прочитал их…
У меня есть это пользовательское промежуточное программное обеспечение redux, которое служит для сбора невыполненных обещаний и отправляет действие для каждого.
const errorMiddleware: Middleware =
({ dispatch }: MiddlewareAPI) =>
(next: Dispatch) =>
async (action: AnyAction) => {
const { meta, payload } = action;
const { withErrorHandler, defaultErrorCode } = meta;
const isPromise = getIsPromise(payload);
if (isPromise amp;amp; withErrorHandler) {
return next(action)
.catch(errorHandler(defaultErrorCode))
.catch((handledError: ISystemError) =>
Promise.reject(
handledError.shouldSkipHandleError
? handledError
: dispatch(addError(handledError))
)
);
}
return next(action);
};
проблема, которую я пытаюсь решить, заключается в async (action: AnyAction) => {
Я получаю сообщение об ошибке со словами
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>
это связано с тем, что incrementAsync
используется createAsyncThunk
из «@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;
}
);
Поэтому я считаю, что мне нужно изменить последнюю функцию `асинхронный (действие: любое действие) = > {«тип действия на что-то другое, но я не могу понять, могу ли я получить разъяснение ваших слов?
вот ссылка на игровую площадку для машинописи, если это поможет
Ответ №1:
Попробуйте это с
const errorMiddleware: Middleware<{}, unknown, ThunkDispatch<unknown, unknown, AnyAction>> =
({ dispatch }) =>
(next) =>
async (action) => {
не нужно печатать что — то слева и справа от =
-ввод текста с одной стороны перенесет его на другую сторону.
Комментарии:
1. В случае, если это кому-то поможет: мне пришлось установить первый параметр типа в мой (который, как я думаю, обычно обозначается как), чтобы он работал
ThunkDispatch
CombinedState
RootState