我尝试在Typescript中创建Factory类,但遇到以下错误:
源代码/ts/类/工厂.ts(8,10):错误TS 7017:元素隐式具有“any”类型,因为类型“Window”没有索引签名。
我尝试搜索此错误,但没有看到任何与我想做的事情完全匹配的内容。
下面是我的工厂类。
/**
* @class Factory
*
* @description Returns object based on given class string
*/
class Factory {
public class(className: string): any {
return window[className];
}
}
我不希望仅仅在编译器中隐藏隐式错误。
任何建议或帮助将不胜感激!如果这不是最好的方式去做这件事,我肯定是开放的改变它以及。
4条答案
按热度按时间eimct9ow1#
另一种无需添加声明就可以在window上创建索引的方法是将其强制转换为
any
类型:h7wcgrx32#
全局变量
window
为type Window
。type Window
没有index signature,因此,typescript无法推断window[yourIndex]
的类型。为了让代码通过,可以将此接口添加到非模块文件中:
请注意,这将允许对
window
的 * 任何 * 属性访问,例如,由于排印错误,window.getElmentById("foo")
将不再是错误。旁注:长期依赖自定义修改的全局变量是自找麻烦,你也不想只为
any
键入提示。打字脚本的全部意义在于引用特定的类型。any
最好永远不要使用。你不应该弄乱全局命名空间,我也建议不要依赖全局窗口变量。t1rydlwq3#
也许可以试试
返回窗口[类名作为窗口类型的键];
4xrmg8kj4#
另一种方法是:
我在使用
window["webkitAudioContext"]
时遇到了这个问题,我用(<any>window).webkitAudioContext
解决了它