繁体   English   中英

打字稿,样式组件错误:TS2769:没有与此调用匹配的重载。 重载 1 of 2

[英]Typescript, styled-component error: TS2769: No overload matches this call. Overload 1 of 2

这是我的样式组件:

const stopPropagation = (event: Event): void => {
  event.stopPropagation();
};

<StyledComp onClick={stopPropagation}> //error occurs here
    hi StyledComp
</StyledComp>

这就是我定义它的方式:

export type Prop = {
  onClick: (event: Event) => void;
};

export const StyledComp = styled.div<Prop>`
  display: flex;
`;

但它返回如下错误:

TS2769:没有与此调用匹配的重载。 重载 1 of 2, '(props: Pick<Pick<Pick<DetailedHTMLProps<HTMLAttributes, HTMLDivElement>, "title" | "slot" | ... 252 more ... | "is"> & { ...; } & StyledComp, "title" | ... 254 更多... | "is"> & Partial<...>, "title" | ... 254 更多... | "is"> & { ... ; } & { ...; }): ReactElement<...>',给出了以下错误。 类型 '(event: Event) => void' 不能分配给类型 '((event: MouseEvent<HTMLDivElement, MouseEvent>) => void) & ((event: Event) => void)'。 类型 '(event: Event) => void' 不能分配给类型 '(event: MouseEvent<HTMLDivElement, MouseEvent>) => void'。 参数“事件”和“事件”的类型不兼容。 类型 'MouseEvent<HTMLDivElement, MouseEvent>' 不能分配给类型 'Event'。 属性“目标”的类型不兼容。 “EventTarget”类型中缺少属性“value”,但类型“{ value: string;”中需要。 }'。 重载 2 of 2, '(props: StyledComponentPropsWithAs<"div", any, StyledComp, never>): ReactElement<StyledComponentPropsWithAs<"div", any, StyledComp, never>, string | ... 1 更多... | (new (props: any) => Component<...>)>',给出了以下错误。 类型 '(event: Event) => void' 不能分配给类型 '((event: MouseEvent<HTMLDivElement, MouseEvent>) => void) & ((event: Event) => void)'。 类型 '(event: Event) => void' 不能分配给类型 '(event: MouseEvent<HTMLDivElement, MouseEvent>) => void'。

注意:你可以在这里找到 styled-component&Typescript 文档!

编辑:

这是事件类型:

export type Event = {
  target: {
    value: string;
  };
  stopPropagation: () => void;
  preventDefault: () => void;
};

错误消息的重要部分是

类型 '(event: Event) => void' 不能分配给类型 '(event: MouseEvent<HTMLDivElement, MouseEvent>) => void'

因此,样式 div 的onClick属性的类型为(event: MouseEvent<HTMLDivElement, MouseEvent>) => void并且您想为其分配类型为(event: Event) => void的函数,但这不起作用,因为类型不兼容。

你应该写:

const stopPropagation = (event: MouseEvent<HTMLDivElement, MouseEvent>): void => {
  event.stopPropagation();
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM