TypeScript 如何声明无需window/global即可直接访问的真正全局变量
解决方案
- 第一步:确认全局声明文件格式正确
你的全局声明文件(比如globals.d.ts)不要包含任何import/export语句,否则会被TypeScript识别为模块,内部的声明不会自动生效为全局类型。直接写入变量声明即可:
如果你必须在声明文件中引入其他类型(比如给某个环境变量指定自定义类型),则需要用declare const ENV_IS_PRODUCTION: boolean; // 可批量添加其他需要声明的全局注入变量 declare const ENV_API_DOMAIN: string;declare global块包裹声明,末尾添加空export标记为模块:import type { CustomEnvType } from './your-type-def'; declare global { const ENV_IS_PRODUCTION: boolean; const ENV_CUSTOM_PARAM: CustomEnvType; } export {}; - 第二步:配置tsconfig.json让TypeScript识别声明文件
把声明文件所在路径加入include数组,如果是自定义的类型目录,建议同时配置typeRoots:{ "compilerOptions": { // 其余原有配置保持不变 "typeRoots": ["./node_modules/@types", "./你的声明文件所在目录"] }, "include": ["src/**/*", "你的声明文件所在目录/**/*"] } - 第三步:重启TypeScript服务验证生效
配置完成后重启IDE的TypeScript语言服务(VSCode可按Ctrl+Shift+P/Cmd+Shift+P执行TypeScript: Restart TS Server命令),之后直接使用ENV_IS_PRODUCTION即可,不会报未定义错误,也不会生成window相关前缀代码,完全符合构建替换的要求。
内容的提问来源于stack exchange,提问作者Maciej Kravchyk
相关产品推荐
相关产品推荐

