【发布时间】:2022-01-28 09:31:30
【问题描述】:
为什么 Typescript 中不允许使用以下猴子补丁?
const oldXHROpen = window.XMLHttpRequest.prototype.open
window.XMLHttpRequest.prototype.open = function (
method: string,
url: string
): void {
return oldXHROpen.apply(this, [method, url])
}
它给出了以下错误:
Argument of type '[string, string]' is not assignable to parameter of type '[method: string, url: string | URL, async: boolean, username?: string | null | undefined, password?: string | null | undefined]'.
Source has 2 element(s) but target requires 3.
但是在查看open 的定义时,有一个方法只需要两个参数。
open(method: string, url: string | URL): void;
【问题讨论】:
-
这是 TypeScript 的设计限制,请参阅 ms/TS#38353。当处理具有多个调用签名的函数类型时,编译器倾向于删除除其中一个之外的所有函数类型(通常是最后一个)。如果您关心解决方法,您可以扩大/断言
oldXHROpen具有您关心的一个呼叫签名,例如this。请注意仍然存在错误,因为该重载不接受超过 2 个参数。 -
好的,谢谢你的解释。我编辑了我的帖子以摆脱额外的
args-error。请提供您的答案,我会接受。
标签: javascript typescript xmlhttprequest