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

为何移除export关键字后TypeScript的‘找不到artificialLatency’错误消失?

未导入变量为何有时不触发TypeScript错误

核心逻辑:TypeScript对模块与脚本的区分

TypeScript会根据文件是否包含import/export语句,将文件划分为两种类型,这直接决定了变量的可访问性检查规则:

  • 模块:只要文件里有import或export,就会被视为ES模块,内部变量默认是模块私有,外部必须通过import才能访问。
  • 脚本:没有任何import/export的文件会被当作全局脚本,内部定义的变量会自动成为全局作用域的成员。

1. 带export时的报错行为

当example2.ts里的artificialLatency加了export,该文件就成了标准模块。example.ts作为独立模块,直接引用未导入的模块私有变量,TypeScript会严格校验模块边界,自然会触发artificialLatency is not defined的错误——这和你预期的一致。

2. 去掉export时错误消失的原因

删掉export后,example2.ts没有了任何模块标识(import/export),TypeScript将其判定为全局脚本,artificialLatency被当作全局变量。此时TypeScript默认不会对全局变量的引用报错(你的strict: true配置里,noImplicitAny也不会触发,因为变量有明确的数值类型,TypeScript能自动推断),所以错误就消失了。

如何强制全局脚本也触发错误

如果你想让所有文件都遵循模块规则,避免全局变量的隐式污染,可以:

  • 给所有无import/export的文件添加空导出语句:export {},强制转为模块;
  • 在tsconfig.json的compilerOptions中添加"moduleDetection": "force",让TypeScript把所有文件都当作模块处理,此时即使没有import/export,未定义的变量引用也会触发错误。

你的配置影响说明

你用的react-ts Vite模板中,tsconfig.json开启了isolatedModules: true,这个选项要求每个文件要么是模块,要么是脚本,但并不会改变脚本的全局变量行为。结合module: ESNext的配置,完全符合TypeScript的模块处理逻辑——这不是VSCode或TypeScript的Bug,是规则差异导致的正常现象。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:07:17