You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TS2339报错:类型'Event'上不存在属性'touches'问题求解

问题原因

基础Event是TypeScript定义的所有事件类型的通用父接口,本身不包含触摸事件专属的touches、changedTouches等属性,这些属性仅在TouchEvent子接口中存在。你将window.event显式声明为Event类型,TypeScript的类型校验自然会检测到访问了不存在的属性,抛出TS2339错误,该报错和DOM库是否引入无关,属于类型使用错误。

解决方案

下面是三种常用的修复方案:

  • 类型断言(适合确认当前事件一定是触摸事件的场景)
    直接将事件对象断言为TouchEvent类型即可:
const event = window.event as TouchEvent;
for (let i = 0; i < event.touches.length; i++) {
  // 你的业务逻辑
}
  • 类型窄化(更安全,推荐)
    先通过instanceof做运行时类型判断,TypeScript会自动将判断分支内的事件类型窄化为TouchEvent,避免强转可能引发的运行时异常:
const event = window.event;
if (event instanceof TouchEvent) {
  for (let i = 0; i < event.touches.length; i++) {
    // 你的业务逻辑
  }
}
  • 事件回调参数显式声明(事件监听场景使用)
    如果是在触摸事件的监听回调中使用事件对象,直接给回调参数指定TouchEvent类型即可:
// 示例:绑定触摸开始事件
document.body.addEventListener('touchstart', (e: TouchEvent) => {
  for (let i = 0; i < e.touches.length; i++) {
    // 你的业务逻辑
  }
})

内容的提问来源于stack exchange,提问作者B Abbasi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:09:01