Electron+TypeScript中sendInputEvent传mouseWheel报TS2345错误如何解决?
Electron中sendInputEvent触发mouseWheel的TypeScript类型错误解决
问题场景
我在BrowserView中使用sendInputEvent发送键盘事件:
view.webContents.sendInputEvent({type: 'keyDown', keyCode: 'C'})
同时在BrowserWindow的渲染页面添加了键盘监听:
window.addEventListener('keydown', function(event) { console.log("App_S-keyDown-event: ", event) })
所有按键及方向键(上、下)均能正常响应。
但在尝试发送鼠标滚轮事件时出现问题。根据Electron文档,sendInputEvent的type字段可设为mouseWheel,但执行以下代码:
SearchWindow.webContents.sendInputEvent({type: 'mouseWheel'})
触发TS2345类型错误,错误信息如下:
TS2345: Argument of type '{ type: "mouseWheel"; }' is not assignable to parameter of type 'MouseInputEvent | MouseWheelInputEvent | KeyboardInputEvent'. Property 'keyCode' is missing in type '{ type: "mouseWheel"; }' but required in type 'KeyboardInputEvent'.
这是TypeScript与Electron的类型兼容问题。
环境信息
electron: 19 typescript: ~4.5.4 O.S. : Ubuntu 22.04 Desktop
解决方法
1. 显式指定事件类型
通过类型断言明确告诉TypeScript当前对象是MouseWheelInputEvent,避免类型推断混淆:
import { MouseWheelInputEvent } from 'electron'; SearchWindow.webContents.sendInputEvent({ type: 'mouseWheel' } as MouseWheelInputEvent);
2. 补充必要字段
TypeScript的类型检查可能比Electron文档要求更严格,补充鼠标滚轮事件的必填或常用字段(如滚动偏移量):
SearchWindow.webContents.sendInputEvent({ type: 'mouseWheel', deltaX: 0, deltaY: 100 // 可根据需求调整滚动幅度 });
3. 同步类型定义版本
确保@types/electron的版本与Electron主版本一致,避免类型定义不匹配:
npm install @types/electron@19 --save-dev
内容的提问来源于stack exchange,提问作者Raphael10
相关产品推荐
相关产品推荐

