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

我宁愿不只是 suppress 编译器中的隐式错误.

任何建议或帮助都将不胜感激!如果这不是做这件事的最佳方式,我当然也愿意改变它.

推荐答案

全局window变量为type Window.type Window没有index signature,因此typescript无法推断window[yourIndex]的类型.

要使代码通过,可以将此接口添加到非模块文件:

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

请注意,这将允许在window上访问any个属性,例如window.getElmentById("foo")将不再是由于输入错误而产生的错误.

旁注:从长远来看,依赖自定义修改的全局变量会带来麻烦,你也不想只为any而输入提示.typescript的全部目的是引用特定的类型.最好不要使用any.您不应该弄乱全局名称空间,我还建议不要依赖全局窗口变量.

Typescript相关问答推荐

发出与HTML多姆事件重叠的Angular事件

实现忽略了JSSOM中的doctor.body.innerHTML集

React组件数组及其props 的类型定义

类型是工作.但它失go 了正确变体的亮点..为什么?或者如何增强?

react 路由6操作未订阅从react 挂钩表单提交+也不使用RTK查询Mutations

如何使用一个字段输入对象,其中每个键只能是数组中对象的id属性,而数组是另一个字段?

类型脚本基于数组作为泛型参数展开类型

如何在Type脚本中动态扩展函数的参数类型?

使用2个派生类作为WeakMap的键

类型推断对React.ForwardRef()的引用参数无效

类型脚本-处理值或返回值的函数

如何将spread operator与typescripts实用程序类型`参数`一起使用

try 使Angular依赖注入工作

我不明白使用打字脚本在模板中展开参考

如何定义这样一个TypeScript泛型,遍历路由配置树并累积路径

如何键入并类型的函数&S各属性

使用&reaction测试库&如何使用提供程序包装我的所有测试组件

Typescript泛型调用对象';s方法

从联合提取可调用密钥时,未知类型没有调用签名

如何使用 runInInjectionContext 中的参数测试功能性路由防护