元素隐式具有"any"类型,因为类型"窗口"没有索引签名?



>我正在尝试在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 Windowtype 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解决了它

最新更新