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

TypeScript中如何禁止未显式导入就使用内置函数和全局变量?

该需求可以实现,通过TypeScript编译配置+ESLint规则配合即可完成,配置完成后你给出的示例代码中未显式导入就使用console、process、Array的场景都会触发错误,完全符合预期,具体配置方式如下:

1. 全量全局禁用配置

如果需要禁止所有未显式导入的内置全局变量使用,按照如下步骤配置:

1.1 TypeScript 编译配置

从类型层面禁止默认识别全局内置对象,修改tsconfig.json:

{
  "compilerOptions": {
    "noLib": true, // 禁用默认加载的ES、DOM等全局内置类型声明
    "types": [], // 禁止自动导入node_modules/@types下的全局类型声明(比如@types/node默认注入的process、console全局类型)
    // 其余原有配置保持不变
  }
}

1.2 ESLint 校验配置

从语法层面检测未声明的全局变量使用,修改.eslintrc.json:

{
  "env": {
    "browser": false, // 禁用浏览器全局变量预设(window、console等)
    "node": false, // 禁用Node.js全局变量预设(process、global等)
    "es2022": false // 禁用ES标准内置全局变量预设(Array、Promise等)
  },
  "rules": {
    // TS项目优先用下面的TS版规则,非TS项目用原生no-undef即可
    "@typescript-eslint/no-undef": "error",
    // "no-undef": "error"
  },
  // 其余原有配置保持不变
}

1.3 内置对象显式导入方案

配置完成后如果需要使用对应内置对象,可自行封装全局导出文件统一管理依赖:

// src/globals.ts
export const console = globalThis.console;
export const process = globalThis.process;
export const Array = globalThis.Array;
// 其他需要用到的内置对象都可在这里统一导出

业务代码中直接从该文件导入即可:

import { console, process, Array } from './globals'

export function print(): number[] {
    console.log("Hello") // 不会报错
    process.stdout.write("World!") // 不会报错
    return new Array<number>() // 不会报错
}
2. 轻量化方案(仅禁用指定全局)

如果不需要禁用所有全局内置对象,仅想禁止特定几个全局的直接使用,可以不用修改TS的noLib配置,仅在ESLint中添加如下规则即可:

{
  "rules": {
    "no-restricted-globals": ["error", "console", "process", "Array"]
  }
}

仅上述配置即可实现指定全局变量未显式导入就使用时抛出错误,其余全局变量可正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:09:04