[英]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.