Повторный вызов другого блока: свойство ‘type’ отсутствует

#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. отправка синхронна — вы не можете ее дождаться ?!