Тип возврата TypeScript действия Redux

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

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

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

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

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

и этот тип определенно неправильный. Какой здесь возвращаемый тип TS? Замедленному сложно найти ответ на этот вопрос в сети.


person Community    schedule 12.02.2020    source источник


Ответы (2)


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

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

А затем вы можете использовать указанный выше интерфейс для ввода текста для вашего mapDispatchToProps.

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

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

person wentjun    schedule 13.02.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'});

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

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

person jered    schedule 13.02.2020