typescript 元素隐式具有“any”类型,因为类型“Window”没有索引签名?

bnl4lu3b  于 2022-12-27  发布在  TypeScript
关注(0)|答案(4)|浏览(227)

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

我不希望仅仅在编译器中隐藏隐式错误。
任何建议或帮助将不胜感激!如果这不是最好的方式去做这件事,我肯定是开放的改变它以及。

eimct9ow

eimct9ow1#

另一种无需添加声明就可以在window上创建索引的方法是将其强制转换为any类型:

return (window as any)[className];
h7wcgrx3

h7wcgrx32#

全局变量windowtype Windowtype Window没有index signature,因此,typescript无法推断window[yourIndex]的类型。
为了让代码通过,可以将此接口添加到非模块文件中:

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

请注意,这将允许对window的 * 任何 * 属性访问,例如,由于排印错误,window.getElmentById("foo")将不再是错误。
旁注:长期依赖自定义修改的全局变量是自找麻烦,你也不想只为any键入提示。打字脚本的全部意义在于引用特定的类型。any最好永远不要使用。你不应该弄乱全局命名空间,我也建议不要依赖全局窗口变量。

t1rydlwq

t1rydlwq3#

也许可以试试
返回窗口[类名作为窗口类型的键];

4xrmg8kj

4xrmg8kj4#

另一种方法是:

(<any>window).className

我在使用window["webkitAudioContext"]时遇到了这个问题,我用(<any>window).webkitAudioContext解决了它

相关问题