首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >'(dispatch: Dispatch<any>,ownProps: OwnProps) => DispatchProps‘类型的参数不能赋值给'DispatchProps’类型的参数

'(dispatch: Dispatch<any>,ownProps: OwnProps) => DispatchProps‘类型的参数不能赋值给'DispatchProps’类型的参数
EN

Stack Overflow用户
提问于 2019-04-16 03:21:38
回答 2查看 1.3K关注 0票数 0

我正在创建一个使用redux和typescript作为语言的react应用程序。我听从了这个post的建议,为mapStateToPropsmaptDispatchToProps函数创建类型。这是我的容器:

代码语言:javascript
复制
import { connect } from 'react-redux'
import { AppState } from 'src/store';
import { changeFilter } from 'src/store/tasks/actions';
import { Dispatch } from 'redux';
import {  VisibilityFilter } from 'src/store/tasks/types';
import * as React from 'react';

 interface OwnProps {
    filter: VisibilityFilter;
  }

  interface StateProps {
    active: boolean
  }

  interface DispatchProps {
    onClick: () => void
  }

  type Props = StateProps & DispatchProps & OwnProps

  export const Filter: React.FC<Props> = props => {
    const { active, onClick, children } = props;

    return (
      <button
        onClick={onClick}
        disabled={active}
        style={{
          marginLeft: "4px"
        }}
      >
        {children}
      </button>
    );
  };


const mapStateToProps = (state: AppState, ownProps: OwnProps): StateProps => ({
    active: ownProps.filter === state.tasksState.visibilityFilter
  })

  const mapDispatchToProps = (dispatch: Dispatch<any>, ownProps:OwnProps): DispatchProps => ({
    onClick: () => dispatch(changeFilter(ownProps.filter))
  })

  export default connect<StateProps,DispatchProps,OwnProps>(
    mapStateToProps,
    mapDispatchToProps
  )(Filter)

但是对于mapDispatchToProps函数,我在connect函数中遇到了以下错误:

类型为‘(DispatchProps:DispatchProps,ownProps: OwnProps)

DispatchProps’的调度参数不能赋给类型为'DispatchProps‘的参数。类型“(Dispatch: Dispatch,ownProps: OwnProps) => DispatchProps”中缺少属性“”DispatchProps“”,但类型“”DispatchProps“”中需要属性“”DispatchProps“”。.ts(2345) Filter.tsx(17,5):此处声明了“”onClick“”。“Filter.tsx(49,5):你的意思是调用这个表达式吗?

我的DispatchProps类型是否有问题,被connect函数拒绝了?

如果您需要知道这些是我正在使用的库:

代码语言:javascript
复制
  "dependencies": {
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-redux": "^7.0.2",
    "react-scripts-ts": "3.1.0",
    "redux": "^4.0.1"
  },
  "devDependencies": {
    "@types/jest": "^24.0.11",
    "@types/node": "^11.13.4",
    "@types/react": "^16.8.13",
    "@types/react-dom": "^16.8.4",
    "@types/react-redux": "^7.0.6",
    "typescript": "^3.4.3"
  }

更新

如果我删除connect函数中的泛型类型,那么错误就会在这里消失,它会推断出类型:

但是现在,当我使用Filter时,容器迫使我在定义中添加onclick属性:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-16 11:19:17

我在这个post中找到了解决方案。有一个为泛型Dispatch定义的名为AnyAction的类型,它是redux库的一部分,因此mapDispatchToProps应该是:

代码语言:javascript
复制
 const mapDispatchToProps = (dispatch: Dispatch<AnyAction>, ownProps:OwnProps): DispatchProps => ({
    onClick: () => dispatch(changeFilter(ownProps.filter))
  })
票数 0
EN

Stack Overflow用户

发布于 2019-04-16 03:32:37

而不是

代码语言:javascript
复制
const mapDispatchToProps = (dispatch: Dispatch<any>, ownProps:OwnProps): DispatchProps => ({
    onClick: () => dispatch(changeFilter(ownProps.filter))
  })

执行此操作

代码语言:javascript
复制
    //in the import section 
    import { bindActionCreators } from "redux";
        const mapDispatchToProps = (dispatch: Dispatch<any>, ownProps:OwnProps): DispatchProps => {
            return bindActionCreators ({

            changeFilter         }),
dispatch
 }

本例中的mapDispatchToProps返回一个包含onClick函数的对象,这不是它的预期行为

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55695977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档