必须锁定工作区 typescript 版本并重启 ts server,否则因内置与本地版本不一致会导致 tsserver 反复重启、类型推导错乱、补全卡顿;需在 .vscode/settings.json 中配置 typescript.tsdk 和 enablepromptuseworkspacetsdk,并删除 tsconfig.json 中的 files 字段,改用 include/exclude 精确控制文件范围。

必须锁定工作区 TypeScript 版本,否则提示延迟问题无法根治。 VSCode 内置的 TS 语言服务(如 5.2)和项目本地版本(如 5.4)不一致时,tsserver 会反复重启、类型推导错乱、补全卡顿——这不是“慢一点”,而是底层解析逻辑冲突导致的响应失效。
确认当前 TS Server 实际使用版本
状态栏右下角点击 TypeScript 版本号,看到的是 Bundled version: 5.2.2 还是 Workspace version: 5.4.5?前者说明你正在用 VSCode 自带旧版服务,哪怕 node_modules/typescript 已安装 5.4.5 也无效。命令面板运行 TypeScript: Select TypeScript Version 后若没真正选中 “Use Workspace Version”,只是“看起来切换了”。
强制指定 typescript.tsdk 路径
仅靠命令面板切换不可靠,尤其在多根工作区或 monorepo 中容易回退。必须在项目根目录的 .vscode/settings.json 中写死路径:
{
"typescript.tsdk": "./node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true
}
注意:./node_modules/typescript/lib 必须存在(即已执行过 npm install --save-dev typescript)。如果项目用 pnpm,路径仍是 ./node_modules/typescript/lib,pnpm 的硬链接机制不影响该路径有效性。
避免 files 字段绕过所有排除规则
tsconfig.json 中一旦出现 files 字段,include 和 exclude 就完全失效,tsserver 会强行加载 files 列出的每一个文件——包括意外写入的 node_modules/react/index.d.ts 或 dist/main.js。检查你的 tsconfig.json 是否含以下内容:
-
"files"字段(删除它,改用include/exclude) -
"typeRoots"指向["./types", "./node_modules/@types"]以外的路径(如["../shared-types"],可能引入巨量未管控声明文件) -
"include"是空数组或["**/*"](必须明确为["src/**/*", "types/**/*.d.ts"])
重启 tsserver 是唯一生效验证点
改完 typescript.tsdk 和 tsconfig.json 后,不手动重启 tsserver = 白改。按 Ctrl+Shift+P(macOS Cmd+Shift+P),输入并执行 Restart TS Server。观察 Developer Tools 控制台是否还有 Failed to load language service 或 Connection to server got closed 报错。补全延迟是否从 2 秒以上降到 200ms 内,才是真实反馈。
真正卡住的地方,往往不是配置写错了,而是以为改完就生效,却没触发重启——tsserver 不会自动感知 typescript.tsdk 变更。











