#typescript #redux #redux-thunk
#typescript #redux #сокращение-thunk
Вопрос:
У меня есть thunk, который получает идентификатор и выполняет некоторую логику в определенной области хранилища. Затем я хочу выполнить некоторую логику в совершенно другой области хранилища. Для этого я не могу запустить обычное действие, так как у меня не будет доступа к хранилищу: мне понадобится другой thunk.
export const thunkOne = ({ id }) => async (dispatch: Dispatch, getState) => {
const state = getState();
await dispatch(thunkTwo({ id }));
// ... do things with the state
return;
};
Теперь thunkTwo
:
export const thunkOne = ({ id }) => (dispatch, getState) => {
const { Bookmarks } = getState();
// do some other logic
return dispatch({
type: ACTION_START,
payload: {
...Bookmarks,
id,
},
});
};
Я получаю эту ошибку TypeScript:
Argument of type '(dispatch: any, getState: any) => any' is not assignable to
parameter of type 'AnyAction'.
Property 'type' is missing in type '(dispatch: any, getState: any) => any' but
required in type 'AnyAction'.ts(2345)
index.d.ts(21, 3): 'type' is declared here.
Не удается найти проблему. Любая помощь будет приветствоваться!
Ответ №1:
Ошибка была в типе отправки, как и должно быть ThunkDispatch<any, void, Action>
:
export const thunkOne = ({ id }) => async (dispatch: ThunkDispatch<any, void, Action>, getState) => {
const state = getState();
await dispatch(thunkTwo({ id }));
// ... do things with the state
return;
};
Комментарии:
1. отправка синхронна — вы не можете ее дождаться ?!