javascript - 类型 '(event: React.MouseEvent) => void' 不可分配给类型 '(e?: MouseEvent<Element, MouseEvent> | undefined) => void'

标签 javascript typescript

我有:

<StyledPill
        size="small"
        label="See All Destinations"
        onClick={handleClick}
        data-index={0}
        featured={selectedSearchType === 0}
        leftIcon={<AllDestinationsIcon />}
      />

其中 StyledPill 具有类型:

export interface IPillProps {
  size: 'small' | 'medium';
  className?: string;
  featured?: boolean;
  label: string | ReactElement;
  disabled?: boolean;
  counter?: boolean;
  onClick?: (e?: MouseEvent) => void;
  leftIcon?: ReactElement<IconProps>;
  onClickLeftIcon?: (e?: MouseEvent) => void;
  rightIcon?: ReactElement<IconProps>;
  onClickRightIcon?: (e?: MouseEvent) => void;
  image?: ReactElement;
}

handleClick是:

  const handleClick = useCallback((event: React.MouseEvent) => {
    console.log('shamoon1', {event}, {selectedSearchType});
    preventClickPropagation(event, false, (e) => setSelectedSearchType(Number((e.target as HTMLElement).dataset.index)))
  },
    []
  );

但这在 onClick 上给了我一个类型错误:

Type '(event: React.MouseEvent) => void' is not assignable to type '(e?: MouseEvent<Element, MouseEvent> | undefined) => void'.
  Types of parameters 'event' and 'e' are incompatible.
    Type 'MouseEvent<Element, MouseEvent> | undefined' is not assignable to type 'MouseEvent<Element, MouseEvent>'.
      Type 'undefined' is not assignable to type 'MouseEvent<Element, MouseEvent>'.

最佳答案

从错误看来,您的匿名函数应该具有不同的签名:

您的匿名 fn 签名(在 useCallback 中) (event: React.MouseEvent) => void

TypeScript 期望什么: (e?: MouseEvent<Element, MouseEvent> | undefined) => void

我想如果您将输入更新为 MouseEvent<Element, MouseEvent> | undefined对于 event那么这意味着您必须更改实现以匹配。

关于javascript - 类型 '(event: React.MouseEvent) => void' 不可分配给类型 '(e?: MouseEvent<Element, MouseEvent> | undefined) => void',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73636407/

相关文章:

javascript - safari 阻止 event.source.postMessage

javascript - 禁用按钮时触发javascript函数?

javascript - 如何访问子类组件模板中的父类(super class)属性? Angular

angular - 如何将 css 预处理器与 Angular 7 一起使用

javascript - 如何在移动设备上包含外部 JavaScript

javascript - 如何跳过 highcharts.js 中的值?

php - jquery POST方法回调函数查询

javascript - 在 javascript "contructor --> prototype"链是永无止境的

javascript - Angular 2 @Input() 装饰器 : use from typescript

javascript - 为什么 typescript 中没有点击按钮?