因为 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/...
因为
EventTarget
是一个抽象基类,所有事件的触发都会有一个EventTarget
,甚至不一定是一个 DOM 对象(比如可能是一个VideoContext
或者WebSocket
),所以当然是不一定有classList
成员的。而且即便是一个看起来确实是一个 DOM 事件(比如
onclick
),我们也可以通过document.dispatchEvent
的方式强行改变它的target
,这种情况下EventTarget
更没办法确定是什么了。目前来说你只能在使用的时候类型断言一次。
P.S. GitHub 上 TypeScript 仓库里有个月经贴,讨论是不是把 EventTarget 设计成泛型类型会更好,不过讨论了好几年了也没定下来。