元素隐含有一个“任何”的元素。键入因为类型' Window'没有索引签名?

时间:2017-02-12 21:09:52

标签: typescript

我试图在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];
    }
}

我宁愿不仅仅是抑制编译器中的隐式错误。

任何建议或帮助将不胜感激!如果这不是最好的方法,我也很乐意改变它。

3 个答案:

答案 0 :(得分:66)

另一种在窗口上编制索引的方法是将其强制转换为any类型:

return (window as any)[className];

答案 1 :(得分:42)

全局window变量属于type Windowtype Window没有index signature,因此,打字稿无法推断出window[yourIndex]的类型。

要传递代码,可以将此接口添加到非模块文件中:

interface Window {
    [key:string]: any; // Add index signature
}

请注意,这将允许window上的任何属性访问权限,例如由于拼写错误,window.getElmentById("foo")将不再是错误。

旁注:从长远来看,依赖于自定义修改的全局变量会引发麻烦,您也不想仅针对any键入提示。打字稿的重点是引用特定的类型。最好永远不要使用any。你不应该混淆全局命名空间,我也建议不要依赖全局窗口变量。

答案 2 :(得分:0)

也许尝试

  

返回窗口[className作为WindowType的键];