派单"Argument of type '(dispatch: Dispatch<T>) => Promise<void>' is not assignable to



我正在开发新的应用程序,遇到了错误。当我尝试调度操作时,出现如下错误:

类型为"(调度:调度(=>承诺"的参数不可分配给类型为"T"的参数。 属性"类型"在类型"(调度:调度(=>承诺"中缺失,但在类型"X"中是必需的。

有没有人遇到过这个问题或可以帮助我?我正在使用软件包:

  • "反应": "^16.7.0",
  • "react-dom": "^16.7.0",
  • "react-redux": "^6.0.0",
  • "react-router-dom": "^4.3.1",
  • "redux": "^4.0.1",
  • "redux-thunk": "^2.3.0",
  • "打字稿": "^3.3.1">

这是我的代码:

 Container:
 import { connect } from 'react-redux';
 import { Dispatch } from 'react';
 import { loginUser, Actions } from './actions';
 import Screen, { Props } from './Screen';
 const mapDispatchToProps = (dispatch: Dispatch<Actions >): Props => ({
   login: (userName: string, password: string) => { 
 dispatch(loginUser(userName, password)); }
 });
 export const ScreenContainer = connect(mapDispatchToProps)(Screen);
 Props:
 export interface Props {
  login: (userName: string, password: string) => void;
 }

Actions:
import { Dispatch } from 'redux';
export type Actions =
  LoginRequest
  | LoginSuccess
  | LoginFailure;
  export const loginRequest = (): LoginRequest => ({
    type: types.LOGIN_REQUEST,
  });
  export const loginFailure = (): LoginFailure => ({
    type: types.LOGIN_REQUEST_FAILED,
  });
  export const loginSuccess = (): LoginSuccess=> ({
    type: types.LOGIN_REQUEST_SUCCESS,
  });
  export interface LoginRequest {
    type: types.LOGIN_REQUEST;
  }
  export interface LoginFailure {
    type: types.LOGIN_REQUEST_FAILED;
  }
 export interface LoginSuccess{
    type: types.LOGIN_REQUEST_SUCCESS;
  }
export const loginUser = (email: string, password: string) => async 
 (dispatch: Dispatch<Actions>) => {
      dispatch(loginRequest());
      try {
        dispatch(loginSuccess());
      } catch (error) {
        dispatch(loginFailure());
      }
  };

我有一个类似的问题,刚刚解决了。

原因:这是来自"@types/反应"的打字稿投诉。

解决方案:添加代码,如下所示:

export const loginUser = (email: string, password: string) => async 
 (dispatch: Dispatch<Actions>) => {
     dispatch<any>(loginRequest());
     ....
  };
 add '<any>' into your complain place. it will passed TS compiler

这就是我将调度返回到我的 redux 打字稿的方式

    return (dispatch: any) => {
      getPosts()
      .then(res => 
        dispatch({ type: DispatchTypes.FETCH_POSTS, notifications: res.data })
      )
      .catch(err => 
        dispatch({ type: "ERROR",msg: "Unable to fetch data" })
      );
    };

也许把任何意志解决错误?

dispatch: any

您可以添加以下内容:

import type {} from 'redux-thunk/extend-redux';

到使用调度的文件。

最新更新