请问ts的定义中 为什么EventTarget类型上比HTMLElement类型少那么多属性?

image.png

比如浏览器运行时EventTarget上实际是有classList的, 但是ts提示不存在

阅读 7.6k
1 个回答

因为 EventTarget 是一个抽象基类,所有事件的触发都会有一个 EventTarget,甚至不一定是一个 DOM 对象(比如可能是一个 VideoContext 或者 WebSocket),所以当然是不一定有 classList 成员的。

而且即便是一个看起来确实是一个 DOM 事件(比如 onclick),我们也可以通过 document.dispatchEvent 的方式强行改变它的 target,这种情况下 EventTarget 更没办法确定是什么了。

目前来说你只能在使用的时候类型断言一次。

at.on('panmove', (e) => {
    (e.target as Element).classList;
})

P.S. GitHub 上 TypeScript 仓库里有个月经贴,讨论是不是把 EventTarget 设计成泛型类型会更好,不过讨论了好几年了也没定下来。

https://github.com/microsoft/...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏