Javascript MouseeEvent的目标是否始终是元素?

Javascript MouseeEvent的目标是否始终是元素?,javascript,typescript,visual-studio-code,Javascript,Typescript,Visual Studio Code,Visual Studio代码显示目标变量的类型为以下TypeScript代码中的类型: document.addEventListener('click', (event) => { let target = event.target }) 为什么它不被标记为一个?可以或也是MouseeEvent的目标? 我使用以下HTML代码在web浏览器窗口中单击,但无法获取除元素之外的EventTarget类型 <!DOCTYPE html> <html> <h

Visual Studio代码显示目标变量的类型为以下TypeScript代码中的类型:

document.addEventListener('click', (event) => {
  let target = event.target
})
为什么它不被标记为一个?可以或也是MouseeEvent的目标? 我使用以下HTML代码在web浏览器窗口中单击,但无法获取除元素之外的EventTarget类型

<!DOCTYPE html>
<html>
<head>
 <title>Test</title>
 <script>
   document.addEventListener('click', (event) => {  
     let target = event.target
     console.log(target instanceof Element)
   })
 </script>
</head>
<body>
test
</body>
</html>
但现在我必须显式地将event.target强制转换为元素,以便对其调用matches()函数:

document.addEventListener('click', (event) => {
  let target = <Element>event.target
  if (target.matches('.carousel__control--prev'))
    shiftCarouselLeft(target.closest('.carousel'))
})
document.addEventListener('click',(事件)=>{
让target=event.target
if(target.matches('.carousel__-control--prev'))
shiftCarouselLeft(目标最近('.carousel'))
})

任何EventTarget都可以是MouseeEvent事件的目标:

const foo=new EventTarget();
foo.addEventListener('单击',(evt)=>{
log('is'foo`',evt.target==foo);
log('is MouseEvent',MouseEvent的evt instanceof);
});

foo.dispatchEvent(新的MouseEvent('click'))
可以在整个
文档
节点上获取鼠标事件,但不是所有事件。您可以获得
Document
节点,例如
mouseenter
mouseleave
as(适用于Chrome,但不适用于Firefox或Safari)


从理论上讲,在文本节点上获取此类事件也是可能的,但恐怕没有浏览器能够做到这一点。

这里有什么问题?@evolutionxbox:我一直在想VS代码或TypeScript是否可以更好地工作,正因为如此,我才可以避免强制转换:let target=event.target
document.addEventListener('click', (event) => {
  let target = <Element>event.target
  if (target.matches('.carousel__control--prev'))
    shiftCarouselLeft(target.closest('.carousel'))
})