>我正在尝试在Typescript中创建工厂类,但遇到以下错误:
src/ts/classes/Factory.ts(8,10(:错误 TS7017:元素隐式具有"any"类型,因为类型"Window"没有索引签名。
我尝试搜索此错误,但没有看到任何与我想做的事情完全匹配的内容。
以下是我的工厂类。
/**
* @class Factory
*
* @description Returns object based on given class string
*/
class Factory {
public class(className: string): any {
return window[className];
}
}
我宁愿不只是抑制编译器中的隐式错误。
任何建议或帮助将不胜感激!如果这不是这样做的最佳方式,我也绝对愿意改变它。
另一种在窗口上索引的方法是将其转换为类型 any
:
return (window as any)[className];
全局window
变量为 type Window
。type Window
没有索引签名,因此,打字稿无法推断window[yourIndex]
的类型。
要使代码通过,可以将此接口添加到非模块文件中:
interface Window {
[key:string]: any; // Add index signature
}
请注意,这将允许window
上的任何属性访问,例如 由于拼写错误,window.getElmentById("foo")
将不再是错误。
旁注:从长远来看,依赖自定义修改的全局变量是自找麻烦的,你也不想仅仅为了any
而键入提示。打字稿的全部意义在于引用特定类型。 any
充其量不应该被使用。你不应该弄乱全局命名空间,我也建议不要依赖全局窗口变量。
也许可以尝试
返回窗口[类名作为窗口类型的键];
另一种方法是:
(<any>window).className
我在使用window["webkitAudioContext"]
时遇到了这个问题我用(<any>window).webkitAudioContext
解决了它