在我的例子中,我正在尝试扩展TS Window接口以包含polyfill fetch
.为什么无所谓.问题是" 我怎么告诉TS这window.fetch
是一个有效的函数? "
我在运行TS v.1.5(IIRC)的VS Code,v.0.3.0中这样做.
在我想要使用它的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
Run Code Online (Sandbox Code Playgroud)
但是如果我在一个单独的".d.ts"文件中声明这个相同的接口并在我的TS类文件中引用它,那就没关系.
这是"typings/window.extend.d.ts"
///<reference path="es6-promise/es6-promise"/>
interface Window {
fetch:(url: string, options?: {}) => Promise<any>
}
Run Code Online (Sandbox Code Playgroud)
现在我可以在我的TS类文件中使用它:
///<reference path="typings/window.extend.d.ts"/>
...
window.fetch('/blah').then(...); // OK
Run Code Online (Sandbox Code Playgroud)
或者,我可以在我的TS类文件中使用另一个名称编写扩展接口,然后在强制转换中使用它:
interface WindowX extends Window {
fetch:(url: string, options?: {}) => Promise<any>
}
...
(<WindowX> window).fetch('/blah').then(...); // OK
Run Code Online (Sandbox Code Playgroud)
为什么扩展接口工作在"d.ts"而不是就地? …