如何在Typescript中使用XMLHttpRequest?

时间:2018-08-09 06:31:10

标签: typescript xmlhttprequest

这对我来说是个新情况,我使用TypeScript已有很长时间了,但是却在XMLHttpRequest上苦苦挣扎。

request.open('GET', path);
request.onload = () => {
   // this is fine
}
request.onerror = (e: ErrorEvent) => {
   // i can't figure this out
   this.registerError(e);
}

如何正确处理该错误响应?我上面的代码在编译过程中失败:

错误TS2322:类型(e: ErrorEvent) => void无法分配给类型(this: XMLHttpRequest, ev: ProgressEvent) => any

我没想到。

如果您将代码更改为

request.onerror = (this: XMLHttpRequest, ev: ProgressEvent) => {
};

这不是有效的打字稿。即使使用this作为参数名称,也令人难以置信。

是否可以提供一个示例来捕获XMLHttpRequest错误?

1 个答案:

答案 0 :(得分:2)

之所以不能指定this是因为您使用的是箭头功能=>。您只需要更改参数的类型:

request.onerror = (e: ProgressEvent) => {

}

您根本不需要指定类型,因为根据onerror的类型可以推断出该类型

request.onerror = (e) => {
    e // is  ProgressEvent
}

如果您使用常规函数,则可以指定this

request.onerror = function(this: XMLHttpRequest, e: ProgressEvent) {
     this // is XMLHttpRequest
}

尽管您并不需要,因为它会根据onerror的类型隐式输入。

request.onerror = function(e: ProgressEvent) {
     this // is still XMLHttpRequest
}