我试图在Typescript中创建一个Factory类,但遇到以下错误:
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];
}
}
我宁愿不仅仅是抑制编译器中的隐式错误。
任何建议或帮助将不胜感激!如果这不是最好的方法,我也很乐意改变它。
答案 0 :(得分:66)
另一种在窗口上编制索引的方法是将其强制转换为any
类型:
return (window as any)[className];
答案 1 :(得分:42)
全局window
变量属于type Window
。 type Window
没有index signature,因此,打字稿无法推断出window[yourIndex]
的类型。
要传递代码,可以将此接口添加到非模块文件中:
interface Window {
[key:string]: any; // Add index signature
}
请注意,这将允许window
上的任何属性访问权限,例如由于拼写错误,window.getElmentById("foo")
将不再是错误。
旁注:从长远来看,依赖于自定义修改的全局变量会引发麻烦,您也不想仅针对any
键入提示。打字稿的重点是引用特定的类型。最好永远不要使用any
。你不应该混淆全局命名空间,我也建议不要依赖全局窗口变量。
答案 2 :(得分:0)
也许尝试
返回窗口[className作为WindowType的键];