升级到TypeScript 4.4.3后访问top属性报Object is possibly null错误如何解决
解决方案
方案1:全局覆盖top的类型声明(最适配你的场景,零业务代码改动)
该方案不需要修改任何现有业务代码,仅通过类型声明覆盖即可解决所有top空类型报错:
- 在项目源码目录下新建类型声明文件,例如
src/global.d.ts - 在文件中写入如下内容,直接覆盖默认的
top属性类型定义:
declare global { interface Window { /** 项目配置X-Frame-Options为sameorigin,top永远非空 */ readonly top: WindowProxy; } } // 避免该声明文件被识别为模块导致全局类型不生效 export {}
- 确认
tsconfig.json的include配置包含该声明文件,例如配置为"include": ["src/**/*"]即可自动加载该类型定义。
该方案仅修正top的空类型问题,不会影响其他TS校验逻辑,也不会屏蔽任何其他代码错误。
方案2:封装全局非空别名(适合不想修改全局默认类型的场景)
如果你不希望修改全局默认的类型定义,可以采用别名封装的方式,仅做一次全局替换即可:
- 在项目全局公共工具文件中定义非空
top别名:
// src/utils/constants.ts export const globalTop = top as WindowProxy;
- 全局搜索替换所有业务代码中的
top.为globalTop.即可,不需要逐行添加空判断或忽略注释。
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

