首页 > 解决方案 > TS2554 预期 1 个参数,但 HTMLImageElement onerror() 为 0

问题描述

我正在创建一个图像并附加一个在发生坏事时onload调用的处理程序:onerror

var image = new Image();
image.onload = function() {
    let img = this as HTMLImageElement;
    if (...) {
        img.onerror();
    }
};

但我收到此img.onerror()行的错误:

TS2554 Expected 1 argument but got 0 

我该如何解决?期望的论点是onerror什么?

标签: typescript

解决方案


正如 MDN 的GlobalEventHandlers.onerror文档中所解释的:

element.onerror接受具有事件类型的单个参数的函数

这适用于所有元素类型,包括HTMLImageElement. 对于错误处理程序,使用对象似乎是合乎逻辑的ErrorEvent,因此您可以在代码中执行以下操作:

if (...) {
    let event = new ErrorEvent('error', {
        message: 'Something bad happened.'
    });
    img.onerror(event);
}

但是请注意,上面的代码只是立即调用附加的事件处理程序(如果img.onerror未设置为函数,则会失败)。

一个更优雅的解决方案是触发事件并让浏览器以与处理所有其他事件相同的方式处理它,包括冒泡到父元素等。您可以通过替换img.onerror(event)img.dispatchEvent(event).

更多关于触发事件的信息可以在这个 MDN 页面中找到。


推荐阅读