Как я могу напечатать результат ожидания отправки thunk? - PullRequest
0 голосов
/ 17 марта 2019

Я хочу дождаться результата thunk, который возвращает строку асинхронно.Моя проблема в последней строке - я не могу понять, как набрать cityName как string.

// ошибка, введите 'ThunkAction, AppState, undefined, any>'нельзя назначить типу 'string'.

Код работает как задумано, мне просто, к сожалению, нужно набрать cityName как any

const getCity = (): Thunk<Promise<string>> => async (
  dispatch,
  getState
): Promise<string> => {
  // ...
  const city = await fetchCityApi(query);
  dispatch(setUserCity(city));
  return city;
};

export const getDataUsingCity = (): Thunk<void> => async dispatch => {
  const cityName: string = await dispatch(getCity());
};

Я используюОболочка для Thunk, которая прекрасно работает, пока мои Thunks не возвращают значение:

export type Thunk<R> = ThunkAction<R, AppState, undefined, any>;

1 Ответ

2 голосов
/ 20 марта 2019

Похоже, что это ошибка в redux-thunk, которая была исправлена ​​ в этом коммите .Использование измененного типа ThunkDispatch в коммите позволяет приведенному выше коду работать без ошибок.Однако новая версия redux-thunk не публикуется с мая 2018 года, то есть это исправление не является общедоступным.

Просматривая связанные проблемы, вы также можете исправить это, изменив определение Thunk<R> to

export type Thunk<R> = ThunkAction<R, AppState, undefined, Action>;

Это заставляет использовать правильную перегрузку ThunkDispatch (ту, которая принимает ThunkAction).В противном случае, из-за any TypeScript не может однозначно определить, какой из двух использовать, и поэтому просто выбирает первый (тот, который принимает просто Action).Именно поэтому вышеуказанный PR устраняет проблему, поскольку они переставляют две перегрузки, чтобы TS выбрал вариант ThunkAction по умолчанию.

...