You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置TypeScript仅暴露Node与浏览器共有的全局变量?

配置TypeScript以仅支持Node.js与浏览器共有的全局变量

要让TypeScript仅识别Node.js和浏览器环境共有的全局变量,可通过以下配置实现:

1. 调整tsconfig.json编译选项

在tsconfig.json中设置compilerOptions,确保只引入两者共有的标准库,同时禁用自动引入环境专属类型:

{
  "compilerOptions": {
    // 指定仅使用ES标准库(包含setTimeout、console、AbortController等公共全局变量)
    "lib": ["ES2020"],
    // 禁止自动引入@types/node、@types/web等环境专属类型包
    "types": [],
    // 开启严格类型检查,避免隐式类型问题
    "strict": true
  }
}
  • lib选项:选择对应版本的ES标准库(如ES2020、ESNext),不要包含dom(浏览器专属)或node(Node.js专属),确保TS仅加载Node与浏览器均实现的ES规范全局变量。
  • types设为空数组:阻止TS自动引入已安装的环境专属类型包,避免混入非公共全局变量类型。

2. 自定义类型声明屏蔽专属全局变量

创建类型声明文件(如src/globals.d.ts),将Node.js和浏览器独有的全局变量声明为never类型,使用时TS会直接报错:

declare global {
  // Node.js专属全局变量,标记为never禁止使用
  const Buffer: never;
  const process: never;
  const __dirname: never;
  const __filename: never;

  // 浏览器专属全局变量,标记为never禁止使用
  const window: never;
  const document: never;
  const navigator: never;
}

export {};

3. 验证配置效果

完成配置后,代码会得到预期的类型检查结果:

Buffer.from(/* ... */); // ❌ 错误:类型为never的表达式不可调用
setTimeout(() => { /* ... */ }, 1000); // ✅ 正常:ES标准全局变量
const a = new AbortController(); // ✅ 正常:ES标准全局变量
console.log(/* ... */); // ✅ 正常:ES标准全局变量
const u = new Uint8Array(/* ... */); // ✅ 正常:ES标准全局变量

process.env.NODE_ENV; // ❌ 错误:类型为never的表达式不可访问属性
__dirname; // ❌ 错误:类型为never的变量不可访问
window.navigator; // ❌ 错误:类型为never的表达式不可访问属性

内容的提问来源于stack exchange,提问作者steveluscher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:41:14