在我的示例中,我正在尝试扩展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”而不是原位?
我真的必须经历这些旋转吗?