加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何扩展’Window’打字稿界面

发布时间:2020-12-13 20:42:39 所属栏目:Windows 来源:网络整理
导读:在我的示例中,我正在尝试扩展TS Window接口以包含用于获取的polyfill.为什么无所谓.问题是“我怎么告诉TS window.fetch是一个有效的函数?” I’m doing this in VS Code,v.0.3.0 which is running TS v.1.5 (IIRC). 在我想要使用它的TS类文件中声明接口不起
在我的示例中,我正在尝试扩展TS Window接口以包含用于获取的polyfill.为什么无所谓.问题是“我怎么告诉TS window.fetch是一个有效的函数?”

I’m doing this in VS Code,v.0.3.0 which is running TS v.1.5 (IIRC).

在我想要使用它的TS类文件中声明接口不起作用:

///<reference path="typings/tsd.d.ts"/>

interface Window {
  fetch:(url: string,options?: {}) => Promise<any>
}
...
window.fetch('/blah').then(...); // TS objects that window doesn't have fetch

但是如果我在一个单独的“.d.ts”文件中声明这个相同的接口并在我的TS类文件中引用它,那就没关系.

这是“typings / window.extend.d.ts”

///<reference path="es6-promise/es6-promise"/>
interface Window {
  fetch:(url: string,options?: {}) => Promise<any>
}

现在我可以在我的TS类文件中使用它:

///<reference path="typings/window.extend.d.ts"/>
...
window.fetch('/blah').then(...); // OK

或者,我可以在我的TS类文件中使用另一个名称编写扩展接口,然后在强制转换中使用它:

interface WindowX extends Window {
  fetch:(url: string,options?: {}) => Promise<any>
}
...
(<WindowX> window).fetch('/blah').then(...); // OK

为什么扩展接口工作在“d.ts”而不是原位?

我真的必须经历这些旋转吗?

如果您的文件中有顶级导入或导出(您必须在某处遇到此问题),则您的文件是外部模块.

在外部模块中,声明接口始终会创建新类型,而不是扩充现有的全局接口.这模仿了模块加载器的一般行为 – 在此文件中声明的内容不会合并或干扰全局范围内的事物.

这种回转的原因在于,在外部模块中,没有办法定义与全局范围中的变量或类型具有相同名称的新变量或类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读