Javascript 作为组件中的道具访问分派功能 从“React”导入React; 导入“/cart dropdown.style.scss”; 从“./cutom-button/custom-button.component”导入{CustomButton}; 从“react redux”导入{connect}; 从“./../redux/root reducer”导入{StoreState}”; 从“../../models/ShopPage”导入{ItemModel}”; 从“./cart-item/cart-item.component”导入{CartItem}; 从“./../redux/cart/cart.selector”导入{selectCartItems}”; 从“重新选择”导入{createStructuredSelector}; 从“react router dom”导入{withRouter,RouteComponentProps}; 接口CartDropdownStoreProps{ cartItems:ItemModel[]; } 接口CartDropdownProps扩展CartDropdownStoreProps{} const\u CartDropdown:React.FC=( 道具:CartDropdownProps和RouteComponentProps ) => { const{cartItems,history}=props; 返回( {cartItems.length( cartItems.map(cartItem=>( )) ) : ( 你的车是空的 )} 历史记录。推送(“/签出”)}> 结帐 ); }; const mapStateToProps=createStructuredSelector( { cartItems:选择cartItems } ); export const CartDropdown=withRouter(connect(mapstatetops)(_CartDropdown));

Javascript 作为组件中的道具访问分派功能 从“React”导入React; 导入“/cart dropdown.style.scss”; 从“./cutom-button/custom-button.component”导入{CustomButton}; 从“react redux”导入{connect}; 从“./../redux/root reducer”导入{StoreState}”; 从“../../models/ShopPage”导入{ItemModel}”; 从“./cart-item/cart-item.component”导入{CartItem}; 从“./../redux/cart/cart.selector”导入{selectCartItems}”; 从“重新选择”导入{createStructuredSelector}; 从“react router dom”导入{withRouter,RouteComponentProps}; 接口CartDropdownStoreProps{ cartItems:ItemModel[]; } 接口CartDropdownProps扩展CartDropdownStoreProps{} const\u CartDropdown:React.FC=( 道具:CartDropdownProps和RouteComponentProps ) => { const{cartItems,history}=props; 返回( {cartItems.length( cartItems.map(cartItem=>( )) ) : ( 你的车是空的 )} 历史记录。推送(“/签出”)}> 结帐 ); }; const mapStateToProps=createStructuredSelector( { cartItems:选择cartItems } ); export const CartDropdown=withRouter(connect(mapstatetops)(_CartDropdown));,javascript,reactjs,typescript,redux,Javascript,Reactjs,Typescript,Redux,当我们不将第二个参数传递给connect函数时,我们可以将dispatch函数作为组件内部的道具来访问,对吗? 已经用javascript做过了,没有任何抱怨,但是当我用typescript尝试这个功能时,道具中不存在分派功能 我把这个组件得到的所有道具都记录下来,并在那里分派f 我不知道为什么我不能访问它! 有人能帮我吗?您已经为\u CartDropdown提供了类型为CartDropdown的道具和路线组件道具。此类型不包含分派。因此,从TS的角度来看,调度不存在 console.log记

当我们不将第二个参数传递给connect函数时,我们可以将dispatch函数作为组件内部的道具来访问,对吗? 已经用javascript做过了,没有任何抱怨,但是当我用typescript尝试这个功能时,道具中不存在分派功能

我把这个组件得到的所有道具都记录下来,并在那里分派f

我不知道为什么我不能访问它!
有人能帮我吗?

您已经为
\u CartDropdown
提供了类型为
CartDropdown的道具和路线组件道具。此类型不包含
分派
。因此,从TS的角度来看,
调度
不存在

console.log
记录由JS表示的对象,并查看
dispatch

要解决此问题,请将
dispatch
类型添加到道具类型,如下所示

import React from "react";

import "./cart-dropdown.style.scss";
import { CustomButton } from "../cutom-button/custom-button.component";
import { connect } from "react-redux";
import { StoreState } from "../../redux/root-reducer";
import { ItemModel } from "../../models/ShopPage";
import { CartItem } from "../cart-item/cart-item.component";
import { selectCartItems } from "../../redux/cart/cart.selector";
import { createStructuredSelector } from "reselect";
import { withRouter, RouteComponentProps } from "react-router-dom";

interface CartDropdownStoreProps {
  cartItems: ItemModel[];
}

interface CartDropdownProps extends CartDropdownStoreProps {}

const _CartDropdown: React.FC<CartDropdownProps & RouteComponentProps<{}>> = (
  props: CartDropdownProps & RouteComponentProps<{}>
) => {
  const { cartItems, history } = props;

  return (
    <div className="cart-dropdown">
      <div className="cart-items">
        {cartItems.length ? (
          cartItems.map(cartItem => (
            <CartItem key={cartItem.id} item={cartItem} />
          ))
        ) : (
          <span className="empty-message">Your cart is empty</span>
        )}
      </div>
      <CustomButton onClick={() => history.push("./checkout")}>
        GO TO CHECKOUT
      </CustomButton>
    </div>
  );
};

const mapStateToProps = createStructuredSelector<StoreState, CartDropdownProps>(
  {
    cartItems: selectCartItems
  }
);

export const CartDropdown = withRouter(connect(mapStateToProps)(_CartDropdown));
从'redux'导入{Dispatch}
常量CartDropdown:React.FC=/**/
import { Dispatch } from 'redux'

const _CartDropdown: React.FC<CartDropdownProps & RouteComponentProps<{}> & {dispatch: Dispatch}> = /* ... */