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

如何将每个TypeScript文件作为独立模块以避免同名标识符冲突?

TypeScript 实现文件隔离、禁用全局作用域共享

在 TypeScript 中,你遇到的同名对象冲突问题,根源是默认的脚本模式(Script Mode)——这种模式下,同一目录的文件会共享全局作用域,导致变量、函数自动暴露到全局,引发同名冲突。要实现像 Dart 那样的文件隔离、显式导入才能访问外部成员的效果,只需切换到**模块模式(Module Mode)**即可。

具体解决方法

只要在每个 TS 文件中添加任意 import 或 export 语句,就能让文件被当作模块处理,模块内部的所有成员默认是私有的,不会暴露到全局作用域。

示例代码

对应你提供的 Dart 示例,改写为 TS 代码如下:

file1.ts

export function myFunc(): number {
  return 99;
}

function main() {
  console.log(myFunc());
}

main();

file2.ts

import * as f1 from './file1';

function myFunc(): string {
  return 'Chesu!';
}

function main() {
  console.log(f1.myFunc());
  console.log(myFunc());
}

main();

补充配置(可选)

如果希望强制所有文件都以模块模式运行,无需手动添加 import/export,可以在 tsconfig.json 中添加以下配置:

{
  "compilerOptions": {
    "module": "ESNext",
    "isolatedModules": true
  }
}

isolatedModules 会强制 TypeScript 将每个文件视为独立模块,即使文件中没有 import/export 语句,也不会共享全局作用域。

原理说明

模块模式下,每个 TS 文件的作用域是独立的,只有通过显式的 import 语句才能访问其他模块的成员,这和 Dart 的文件隔离逻辑完全一致,从此同名函数、变量不会再因为全局作用域共享而冲突。

内容的提问来源于stack exchange,提问作者Ουιλιαμ Αρκευα

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:35:04