打字稿错误:类型“ EventTarget”上不存在属性“删除”

时间:2019-01-20 12:00:39

标签: reactjs typescript

我收到错误类型错误:类型'EventTarget'上不存在属性'remove'。

<img onError={function(e) {
                    e.target.remove();
                }} src="../me.jpg" alt=""/>

2 个答案:

答案 0 :(得分:2)

解决方案

替换此:

<img onError={event => event.target.remove()}

与此:

<img onError={event => event.currentTarget.remove()}

说明

您要从(<img />派发事件的元素是自包含的,本身不能有任何子代。同时,事件处理程序直接在同一节点上定义。这意味着发出事件的节点也是捕获该事件的节点。换句话说,event.targetevent.currentTarget相同。

这两个具有不同的类型定义。前者仅定义为EvenTarget,而后者则更具体地定义为EventTarget & HTMLImageElement。这就是event.currentTarget配备了remove()方法并且您不需要任何其他类型保护的原因。

答案 1 :(得分:1)

因此,很明显,在Typescript让我使用.remove之前,我必须检查e.target是否为HTML元素,尽管它显然是可以使用的,所以似乎并不太浪费时间检查一下。

if (e.target instanceof HTMLElement) {
                    e.target.remove();
                }