TypeScript возвращаемый тип действия Redux - PullRequest
2 голосов
/ 13 февраля 2020

У меня есть это в кодовой базе;

export const login = (user, pass) => {
  return (dispatch) =>    dispatch({ type: LOGIN });
}

каков тип возврата login?

Я пробовал это:

export const login = (user, pass)  : ReducerAction {
  return (dispatch) =>  dispatch({ type: LOGIN });
}

и это Тип определенно не так. Какой правильный тип возврата TS здесь? Отсталый трудно найти ответ на этот вопрос онлайн.

Ответы [ 2 ]

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

Достаточно будет предоставить интерфейс для ваших реквизитов диспетчеризации редукционного действия следующим образом:

interface DispatchProps {
  login: () => void;
}

И затем вы можете использовать вышеупомянутый интерфейс, чтобы предоставить наборы для mapDispatchToProps.

const mapDispatchToProps = (dispatch: Dispatch<DispatchProps>) =>
  bindActionCreators({
    login: () => login(),
  }, dispatch);

Если вы работаете с response / redux / TypeScript, я бы порекомендовал это guide , поскольку оно имеет массу ресурсов. Кроме того, вы можете установить typesafe-actions , которая является формой «утилит Typesafe для« создателей действий »в Redux / Flux Architecture».

0 голосов
/ 13 февраля 2020

Проблема здесь в том, что Typescript не знает тип dispatch. Это может быть что угодно, поскольку Typescript знает, что это просто какой-то случайный аргумент функции и может иметь тип any. Вам нужно объявить его как правильный тип, а Typescript сможет вывести остальное:

const LOGIN = "LOGIN";

type LoginAction = {
  type: typeof LOGIN
}

const login = (user, pass) => (dispatch: React.Dispatch<LoginAction>) => dispatch({type: 'LOGIN'});

Обратите внимание, что для действия входа в систему также должен быть объявлен тип, потому что он передается в generi * Тип 1012 * React.Dispatch, чтобы Typescript знал, какой тип он отправляет.

Вам может понадобиться установить пакет @types/react-redux, чтобы получить тип React.Dispatch, я не уверен, откуда он с макушки головы.

...