React/TypeScript报错:类型Window & typeof globalThis上不存在属性_env_
问题原因
这个报错是TypeScript的全局类型校验导致的,默认的Window类型定义中没有你新增的_env_属性,TS无法识别该自定义字段,因此抛出类型错误。
解决方案
方案1:扩展Window全局类型(推荐,可保留完整类型校验)
- 在项目
src目录下创建类型声明文件,命名为env.d.ts(如果是Create React App项目,也可以直接在已有的react-app-env.d.ts中追加内容) - 在文件中写入以下代码:
declare global { interface Window { _env_: { API_URL: string; // 其他存放在`_env_`中的自定义环境变量可在此处逐一声明类型 // 如果环境变量数量不固定,可以添加索引签名兼容所有字符串类型的字段: [key: string]: string; } } } // 必须导出空对象,让TS将该文件识别为模块,才能正常扩展全局类型 export {};
- 检查项目根目录的
tsconfig.json,确保include配置项包含了该声明文件所在的目录,示例配置如下:
{ "include": ["src"] }
配置完成后重启TS服务,报错就会消失,后续使用window._env_时还会有对应的类型提示。
方案2:临时类型断言(仅适合快速测试用)
如果只是临时调试不想加类型定义,可以用类型断言跳过校验,写法如下:
<p>API_URL: {(window as any)._env_.API_URL}</p>
注意:该方案会丢失_env_字段的类型校验,不推荐在生产环境长期使用
内容的提问来源于stack exchange,提问作者Sole
相关产品推荐
相关产品推荐

