tsserver断网时卡住是因默认启用网络探测,DNS超时即放弃本地@types解析;需在tsconfig.json中显式配置typeRoots和types,并关闭autoImportSuggestions等联网功能,再重启TS服务。

为什么离线时tsserver卡住不索引
tsserver默认会探测网络连通性,断网后DNS查询超时就直接放弃本地@types解析,哪怕node_modules/@types/node完整存在。这不是缓存没刷,而是启动逻辑主动跳过——你看到require('fs')没提示、process.env无类型,基本就是它卡在联网握手环节。
检查tsconfig.json是否显式声明typeRoots
仅靠"moduleResolution": "node"不够。必须在tsconfig.json里补全两处:
-
"typeRoots": ["./node_modules/@types"]—— 明确告诉tsserver去哪找声明文件 -
"types": ["node", "jest"]—— 列出你实际依赖的包名,避免它盲目扫描整个@types目录
改完后必须重启TS服务:按Ctrl+Shift+P → 输入TypeScript: Restart TS server,不能只刷新窗口。
验证本地@types是否真被识别
打开任意.ts文件,把光标停在fs上,按F12。若跳转失败,再打开输出面板(Ctrl+Shift+U)→ 选Log (TypeScript),搜索node_modules/@types/node。如果日志里出现Skipping @types/node: not in typeRoots,说明typeRoots路径写错了,比如漏了./前缀或拼错node_modules。
关掉所有联网相关的TS设置
这些选项在离线环境下反而会拖慢甚至阻塞加载:
-
"allowJs": true→ 若项目没JS文件,关掉能减少扫描量 -
"checkJs": false→ 离线时JS类型检查基本不可用,关掉避免报错中断 -
"autoImportSuggestions": false→ 它依赖远程npm registry补全,离线必挂
改完同样要重启TS服务。别信“保存就生效”,tsserver进程不重启,旧配置一直活着。
最常被忽略的是:改完tsconfig.json后没重启TS服务,或者typeRoots路径用了绝对路径(如/home/user/project/node_modules/@types),而VSCode工作区路径一变就失效。离线环境里,路径必须相对且稳定。


















