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
相关产品推荐
相关产品推荐

