3

我在代码库中有这个;

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

的返回类型是login什么?

我试过这个:

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

而那种类型肯定是错误的。这里正确的 TS 返回类型是什么?迟钝很难在网上找到答案。

4

2 回答 2

1

通过以下方式为您的 redux action dispatch props 提供接口就足够了:

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

然后您可以使用上面的界面为您的mapDispatchToProps.

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

如果你正在使用 react/redux/TypeScript,我会推荐这个指南,因为它有大量的资源。此外,您可能想要安装typesafe-actions,这是“Redux / Flux 架构中“action-creators”的类型安全实用程序的一种形式”。

于 2020-02-13T02:01:08.800 回答
0

这里的问题是 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类型,我不确定它是从哪里来的。

于 2020-02-13T01:49:48.723 回答