Правильный тип возврата для действия Redux - PullRequest
1 голос
/ 18 февраля 2020

Этот тип ввода работает, но по какой-то причине обещание, которое dispatch () должен вернуть, не определено:

enter image description here

Таким образом, вместо использования ThunkAction<any,any,any,any> есть ли лучший тип, который я могу использовать? Или, может быть, ThunkAction является неправильным типом в целом?

Вот весь мой код:

import {ThunkAction, ThunkDispatch} from 'redux-thunk';
const {setLanguage} = require('redux-polyglot');
import {CMError} from '../shared/cm-error';
import {receiveCurrentUser} from './login';

export const signup = (
  email: string,
  pwd: string,
  fullName: string
): ThunkAction<any, any, any, any> => {

  return (dispatch) => {

    return fetchFromApi(`/cp/users`, {
      method: 'POST',
      body: {
        email: email,
        password: pwd,
        name: fullName
      }
    }).then(
      ([resp, json]) => {

        if (resp.status === 200) {
          return dispatch(receiveCurrentUser(json));
        }
      })
    );
  };
};

Я не вижу упоминания об этом в документах о реактивной редукции TS: https://react-redux.js.org/using-react-redux/static-typing

1 Ответ

1 голос
/ 18 февраля 2020

Это связано с тем, что thunks не являются частью React-Redux - это отдельное промежуточное ПО, добавляемое в ядро ​​Redux.

Мы расскажем о наборе thunks в документации Redux «Использование с TypeScript» page , а в страница «Расширенное руководство по Redux Toolkit» .

Специально для вашего случая первый аргумент c для ThunkAction является ожидаемым типом возврата стук. Таким образом, он должен выглядеть примерно так:

ThunkAction<Promise<SomeValue>, RootState, unknown, Action<String>>

, и это следует применять к определению getCurrentUser().

...