gpt4 book ai didi

typescript - 通过 event.type 处理鼠标事件和触摸事件

转载 作者:行者123 更新时间:2023-12-05 01:40:10 27 4
gpt4 key购买 nike

我有一个通用处理程序函数,它接受一个事件,可以是鼠标事件或触摸事件。然后它将逻辑委托(delegate)给适当的函数。不过,Typescript 会抛出错误,因为显然 mouseEvent !== touchEvent

function handleStopDrag(e: MouseEvent | TouchEvent) {
switch (e.type) {
case 'mouseup':
// Error: Argument of type 'MouseEvent | TouchEvent' is not assignable to parameter of type 'MouseEvent'.
handleMouseUp(e)
break
case 'touchcancel':
case 'touchend':
// Error: Argument of type 'MouseEvent | TouchEvent' is not assignable to parameter of type 'TouchEvent'.
handleTouchEnd(e)
break
}
}

function handleMouseUp(e: MouseEvent){ ... }
function handleTouchEnd(e: TouchEvent) { ... }

如何根据我上面的检查来声明事件类型是特定类型?或者是否有更好的方法来格式化我的代码以指定事件类型?

最佳答案

您需要使用 type guard启用 TypeScript 来缩小 MouseEvent | TouchEvent联合类型为 MouseEventTouchEvent键入而不必求助于类型断言( <MouseEvent> ee as MouseEvent ):

  • 使用类型谓词:
function isMouseEvent(e: MouseEvent | TouchEvent): e is MouseEvent {
return e.type === 'mouseup'; // || e.type === 'click'...
}

然后像这样使用它

if (isMouseEvent(e)) {
switch (e.type) {
case 'mouseup':
handleMouseUp(e);
break;
} else (isTouchEvent(e)) {
switch (e.type) {
case 'touchcancel':
case 'touchend':
handleTouchEnd(e);
break;
}
  • instanceof :
if (e instanceof MouseEvent) {
// switch specific MouseEvent type here or inside another delegator
handleMouseEvent(e);
} else if (e instanceof TouchEvent) {
handleTouchEvent(e);
}

关于typescript - 通过 event.type 处理鼠标事件和触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56927845/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com