首页 > 解决方案 > TypeScript:ev.target 和 Node.contains:EventTarget 不可分配给 Node

问题描述

这是代码:

function bodyClickHandler(ev: MouseEvent) {
    if(containerRef.current && containerRef.current.contains(ev.target)) return;
    setOpen(false);
}

错误:

'EventTarget | 类型的参数 null' 不可分配给“节点 |”类型的参数 空值'。“EventTarget”类型缺少“Node”类型中的以下属性:baseURI、childNodes、firstChild、isConnected 和 44 more.ts(2345)

containerRef.current是一个HTMLDivElement.contains应该是这个功能

ev.target保证是Node某种?

我可以施放它(ev.target as Node),但我想弄清楚在什么情况下这可能会失败?我可以点击什么不是节点?

标签: htmltypescript

解决方案


简短的回答:这是由于他们的打字错误。继续施放它。

长答案:发生这种情况的原因是,如果您单击<svg />按钮内部(例如),则event.target将指向 SVG,这不能保证是按钮(显然)。只有一个事件currentTarget指向处理程序所在的元素。因此,制作 React 类型的人决定他们将和事件定义currentTargetbutton我们示例中的内容,但不保证事件的内容,target除非它是一个 EventTarget。因此,您必须坚持使用它。这在本 PR中进行了讨论。


推荐阅读