比如浏览器运行时EventTarget
上实际是有classList
的, 但是ts提示不存在
因为 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/...