繁体   English   中英

打字稿中重写XMLHttpRequest.prototype.open失败

Overriding XMLHttpRequest.prototype.open fails in typescript

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想在Typescript中重写XMLHttpRequest.prototype.open,但这对我来说是失败的,是否有解决方法?

(function(open) {
  XMLHttpRequest.prototype.open = (method, url, async, user, pass) => {
    url = new URL(url);
    if (window["_keycloak"] && window["_keycloak"].token)
      url.searchParams.set('token', window["_keycloak"].token);
    open.call(this, method, url, async, user, pass);
  };
})(XMLHttpRequest.prototype.open);

这是我收到的错误消息

[ts]类型'((方法:任何,网址:任何,异步:任何,用户:任何,通过:任何)=>无效)不能分配给类型'{(方法:字符串,网址:字符串):无效; (方法:字符串,URL:字符串,异步:布尔值,用户名?:字符串,密码?:字符串):void; }”。

2 个回复

感谢@Matt的建议,我找到了解决方案。 实际上,如果您查看XMLHttpRequest接口,则会为open方法提供两种实现

open(method: string, url: string): void;
open(method: string, url: string, async: boolean, username?: string | null, password?: string | null): void;

因此解决方案是通过添加可选参数来覆盖第一个。 这是最终的解决方案:

(function(open) {
  XMLHttpRequest.prototype.open = (method: string, url: any , async?: boolean, username?: string, password?: string) => {
    url = new URL(url);
    if (window["_keycloak"] && window["_keycloak"].token)
    url.searchParams.set('token', window["_keycloak"].token);
    open.call(this, method, url, async, username, password);
  };
})(XMLHttpRequest.prototype.open);

通过使async,用户名和密码成为可选选项可以解决该问题。

如果您查看错误消息,则原始XMLHttpRequest.prototype.openusernamepassword参数是可选的( ?标记),但是在您的实现中,它们是必需的,因此您的实现与省略那些调用者的类型不兼容。参数。 只需标记您的userpass可选参数即可。

1 自定义XMLHttpRequest.prototype.open

我正在尝试在发送之前听XHR。 在$.ajax方法中类似于jQuery的beforeSend 。 我的目标是在发送之前监听所有XHR。 我想最接近的是如果this.readyState === 1检查上面? 上面的代码是否会导致像jQuery这样的ajax库出现故障,因为我在X ...

6 XMLHttpRequest的open()在Chrome中失败

我正在尝试修补一些在Chrome中无法使用的AJAX。 这不是我的脚本,我不想将整个内容转换为jQuery。 使用Internet Explorer时,这实际上会在日志中输出某些内容,但是在(Ch)rome中时,我会得到一个空字符串,因为JS调试器告诉我GET失败。 目标URL是正确 ...

7 打字稿中带有 Observable 的 XMLHttpRequest

当我尝试管理用于上传文件的 XMLHttpRequest 调用的结果时,我遇到了 tslint 问题。 这是我在互联网上找到的当前方法: 所以它起作用了,文件正在上传,后端回复 200 响应。 但是在我使用这个函数的方法中,我这样做: 但是 tslint 在地图点告诉我这个: 所以我认为 ...

9 Travis Build中的打字稿失败

我试图让我的项目建立在Travis上(所有工作在当地都很好)。 我遇到了Typescript的问题。 在我的.travis.yml文件中,我有这组命令: 运行打字稿编译。 但是,当我运行它时,我会遇到大量错误...... 例如 客户端/ dev / nav / na ...

10 重写XMLHttpRequest的open / send方法

我试图捕获从Gmail发送的每个XHR请求,并在邮件正文中添加一个分类标签。 我没有发送新的XHR请求。 我的代码通过重写XMLHttpRequest的open / send函数,像对所有XHR请求的过滤器一样工作。 我从上周开始处理此问题。请帮助我。 我在堆栈溢出时找到此链接: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM