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