TypeScript报错:‘MouseEvent’并非泛型类型的解决求助
解决方法
报错核心原因是你使用的MouseEvent是全局DOM原生类型,它并非泛型结构。React为鼠标事件提供了专门的泛型类型React.MouseEvent,替换成这个类型就能解决问题。
有两种修改方式:
方式一:直接使用React命名空间下的类型
无需额外导入,直接在参数类型里指定React.MouseEvent<HTMLButtonElement>:
"use client"; import React, { ReactNode } from "react"; /** * Custom General Purpose Button Definition * @param param0 * @returns */ function CButton({ children, className, onClickCallback, name, }: { children: ReactNode; className?: string; onClickCallback?: (e: React.MouseEvent<HTMLButtonElement>) => void; name?: string; }) { return ( <> <button className={ className ?? "btn inline-block bg-white border-[1px] border-gray-300 dark:border-gray-800 hover:text-white dark:bg-zinc-900 dark:hover:bg-gray-950 m-[1px]" } onClick={(e) => onClickCallback?.(e)} name={name} > {children} </button> </> ); } export default CButton;
方式二:从React中导入MouseEvent类型
在导入语句中添加MouseEvent,之后直接使用MouseEvent<HTMLButtonElement>:
"use client"; import React, { ReactNode, MouseEvent } from "react"; /** * Custom General Purpose Button Definition * @param param0 * @returns */ function CButton({ children, className, onClickCallback, name, }: { children: ReactNode; className?: string; onClickCallback?: (e: MouseEvent<HTMLButtonElement>) => void; name?: string; }) { return ( <> <button className={ className ?? "btn inline-block bg-white border-[1px] border-gray-300 dark:border-gray-800 hover:text-white dark:bg-zinc-900 dark:hover:bg-gray-950 m-[1px]" } onClick={(e) => onClickCallback?.(e)} name={name} > {children} </button> </> ); } export default CButton;
补充说明:React的MouseEvent泛型只需传入目标元素类型(如HTMLButtonElement)即可,不需要第二个参数——原生DOM的MouseEvent本身不支持泛型,这正是你报错的关键。
内容的提问来源于stack exchange,提问作者underscore
相关产品推荐
相关产品推荐

