Angular严格模式下如何正确访问对象上动态添加的属性?
报错原因
Angular严格模式默认开启了noImplicitAny校验规则,TypeScript的默认Window类型定义中未声明Prism属性,通过字符串索引访问window时无法推断属性类型,因此触发隐式any类型的报错。
可用解决方案
方案1:快速类型断言(最便捷,适合临时使用)
将window临时断言为any类型绕过检查,代码修改为:if ((window as any)['Prism']) { // 原有逻辑 }方案2:扩展全局Window类型(最规范,适合长期维护的项目)
在项目的全局类型声明文件(通常为src/typings.d.ts或任意*.d.ts全局声明文件)中添加如下定义:declare global { interface Window { // 如果你知晓Prism的具体类型,可以替换any为对应类型获得更好的类型提示 Prism?: any; } }配置完成后直接使用
if (window.Prism)即可,不会触发报错同时支持类型校验。方案3:单行忽略类型检查(不推荐,仅适合临时调试)
在报错代码行上方添加忽略注释,强制跳过当前行的类型校验:// @ts-ignore if (window['Prism']) { // 原有逻辑 }
内容的提问来源于stack exchange,提问作者Rafael de Castro
相关产品推荐
相关产品推荐

