Ant Design按钮onClick事件TypeScript错误修复咨询:'boolean'类型无法赋值给'MouseEventHandler<HTMLElement>'类型
这个错误的根源在于你的toggleSideMenu函数的返回类型不符合onClick事件处理函数的要求。让我拆解一下:
你的toggleSideMenu在default分支返回了false,这导致TypeScript推断它的返回类型是boolean | void(其他分支没有返回值,默认是void)。而Ant Design Button的onClick期望的是一个MouseEventHandler<HTMLElement>类型的函数——这个函数可以返回void(无返回值)或者boolean(用于阻止默认浏览器行为),但这里的问题是,当你用箭头函数() => toggleSideMenu('guidance')作为onClick的回调时,TypeScript会关注整个函数的签名,而不仅仅是你当前调用的分支,所以它认为这个回调可能返回boolean,从而触发类型不匹配的错误。
这里有几个简单的修复方式:
方案1:移除default分支的返回值(推荐)
既然toggleSideMenu的作用是更新状态,它本质上不需要返回任何值。把default分支的return false改成空返回或者直接去掉:
const toggleSideMenu = (menu: string) => { switch (menu) { case 'guidance': setIsGuidanceVisible(!isGuidanceVisible); break; case 'bluetext': setIsBlueTextVisible(!isBlueTextVisible); break; case 'tasklist': setIsTaskListVisible(!isTaskListVisible); break; case 'projectsnapshot': setIsProjectSnapshotVisible(!isProjectSnapshotVisible); break; default: return; // 或者直接删除这一行,switch会自然结束 } };
方案2:显式指定函数返回类型为void
如果你想保留default分支的return false,可以强制告诉TypeScript这个函数的返回类型是void,忽略分支的返回值差异:
const toggleSideMenu = (menu: string): void => { switch (menu) { case 'guidance': setIsGuidanceVisible(!isGuidanceVisible); break; case 'bluetext': setIsBlueTextVisible(!isBlueTextVisible); break; case 'tasklist': setIsTaskListVisible(!isTaskListVisible); break; case 'projectsnapshot': setIsProjectSnapshotVisible(!isProjectSnapshotVisible); break; default: return false; break; } };
方案3:修改onClick的回调写法
在箭头函数里用块级作用域包裹调用,显式不返回任何值:
<Button onClick={() => { toggleSideMenu('guidance'); }} icon={<CompassFilled/>} type='default' />
这三种方式都能解决你的类型错误,其中方案1是最符合代码语义的选择,因为状态更新函数本就不需要返回值。
内容的提问来源于stack exchange,提问作者Phorden
相关产品推荐
相关产品推荐

