大型项目VSCode补全延迟超1秒主因是TSServer全量AST构建和类型检查,须配置tsconfig.json的skipLibCheck、composite、include三项,并在.vscode/settings.json中关闭autoImports、日志等,最后手动重启TSServer。

大型项目里 VSCode 补全延迟超过 1 秒,基本可以确定不是硬件问题,而是 TypeScript 语言服务(TSServer)在反复做全量 AST 构建和类型检查——尤其是 node_modules 被卷入分析范围时,tsserver 内存常飙到 2GB+,补全卡顿就是必然结果。
tsconfig.json 必须加的三项配置
不改这个文件,其他优化效果有限。重点不是“可选”,而是“不加就注定慢”:
-
"skipLibCheck": true—— 关闭对node_modules中类型声明的检查,提速最直接; -
"composite": true和"declarationMap": false—— 启用增量编译,避免每次重算整个项目; -
"include"显式列出源码路径,例如["src/**/*", "types/**/*"],严禁留空或写["./**/*"],否则 TSServer 会扫描dist、build、.git等无关目录; - 检查是否有
"typeRoots"指向巨量@types目录,如有,精简为仅需的包,例如["node_modules/@types"]。
工作区级 settings.json 关键开关
用户级设置会影响所有项目,但真正起效的是当前项目的 .vscode/settings.json:
-
"typescript.preferences.includePackageJsonAutoImports": "off"—— 大项目下自动补全package.json依赖名会触发额外解析; -
"typescript.suggest.autoImports": "inline"(非默认true)—— 全量自动导入建议在 10k+ 文件项目里极易卡死; -
"editor.quickSuggestions"对"other"和"comments"设为false—— 减少非关键场景的提示触发; -
"typescript.tsserver.log": "off"—— 日志写入本身就会拖慢tsserver(调试时除外)。
files.watcherExclude 配置必须精准
VS Code 的文件监视器(file watcher)一旦超载,不仅补全卡,保存延迟、搜索变慢、甚至点击菜单都可能响应迟滞:
- 在
.vscode/settings.json中配置"files.watcherExclude",必须包含:"**/node_modules/**"、"**/dist/**"、"**/build/**"、"**/.git/**"、"**/coverage/**"; - 若项目是 Lerna/Yarn Workspaces,额外加上
"**/packages/**/node_modules/**"; - 注意 glob 模式必须以
**/开头,否则不生效; - Linux/macOS 用户遇到
ENOSPC或watcher limit reached报错,说明系统 inotify 句柄已耗尽,仅靠配置不够,还需执行echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p(Linux)。
改完配置后别忘了重启 TSServer
这是最容易被跳过的一步:改完 tsconfig.json 或 .vscode/settings.json 后,tsserver 不会自动重载新配置。它会继续用旧状态运行,直到你手动干预:
- 按
Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入并选择Restart TS Server; - 不要等它“自己恢复”,也不要用关闭再打开文件夹的方式替代——那只是重启编辑器,不是重启语言服务;
- 如果补全仍慢,打开命令面板运行
Developer: Toggle Developer Tools,切到 Console 标签页,确认有没有tsserver启动失败或内存溢出日志。
真正卡住的地方往往不是配置写得对不对,而是改完之后没让 tsserver 重新加载——它不会主动感知磁盘上的变更,只认你亲手点下的那个重启命令。



















