VS Code重启tsserver后仅显示当前打开文件错误,求排查方案
VS Code TypeScript工作区仅显示重启时打开文件的错误问题排查与解决
在VS Code中使用TypeScript工作区开发React应用时,出现以下异常:
- 每次重启tsserver后,仅能看到重启瞬间处于打开状态的文件的错误提示,其余文件无任何错误显示。
- 场景示例:重启时打开
index.tsx,就只显示该文件的错误;关闭index.tsx打开app.tsx后重启tsserver,则仅显示app.tsx的错误,index.tsx及其他文件无错误提示。 - 项目打包编译始终正常,无报错。
当前VS Code设置如下:
{ "editor.formatOnSave": true, "[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[json]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "typescript.updateImportsOnFileMove.enabled": "always", "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, "eslint.validate": [ "javascript", "typescript" ], "typescript.tsdk": "node_modules\\typescript\\lib", // Use Workspace Version for using plugins from tsconfig "typescript.enablePromptUseWorkspaceTsdk": true, "typescript.tsserver.experimental.enableProjectDiagnostics": true, "typescript.tsserver.log": "verbose" }
目前找到一个临时解决方法,但不清楚原理:
- 在
tsconfig.json同级目录创建空的dummy.ts文件 - 启动VS Code后,若有
.tsx文件打开会显示其错误;关闭该.tsx文件,打开dummy.ts后重启tsserver(通过Ctrl + P执行TypeScript: Restart TS Server),所有错误提示消失(但实际打包仍正常)
可能的原因与解决办法
1. 检查tsconfig.json的include/exclude配置
tsserver依赖tsconfig.json确定检查范围,若include未覆盖全部需要检查的文件,或exclude误排除了核心文件,会导致仅打开的文件被扫描:
- 确保
include覆盖所有源码目录,比如:"include": ["src/**/*", "types/**/*"] - 核对
exclude配置,避免误排除src等关键目录。
2. 禁用tsserver实验性项目诊断
当前开启的typescript.tsserver.experimental.enableProjectDiagnostics是实验性功能,可能存在兼容性问题,导致全局诊断失效:
- 将该配置改为
false,重启VS Code和tsserver后观察:"typescript.tsserver.experimental.enableProjectDiagnostics": false
3. 重置TS Server缓存
tsserver缓存损坏可能引发异常行为:
- 通过
Ctrl + Shift + P执行TypeScript: Open TS Server Log,查看日志中是否有明确报错 - 关闭VS Code,删除对应项目的缓存目录(路径随系统不同):
- Windows:
%APPDATA%\Code\User\workspaceStorage\下的项目缓存文件夹 - macOS:
~/Library/Application Support/Code/User/workspaceStorage/下的项目缓存文件夹 - Linux:
~/.config/Code/User/workspaceStorage/下的项目缓存文件夹
- Windows:
- 重新打开项目并重启tsserver
4. 排查TS版本兼容性
你使用了工作区本地的TS版本(typescript.tsdk指向node_modules),若该版本与VS Code内置TS版本差异过大,可能引发冲突:
- 尝试切换为VS Code内置TS版本:注释掉
typescript.tsdk配置,重启tsserver后在右下角提示中选择"Use VS Code's Version" - 或更新工作区TS版本到与内置版本接近的稳定版
5. 检查ESLint与TS Server的冲突
ESLint的自动修复或范围配置可能与tsserver诊断逻辑冲突:
- 暂时禁用
editor.codeActionsOnSave中的source.fixAll.eslint,重启tsserver后观察全局错误提示是否恢复 - 检查
.eslintrc配置,确保files/include未限制仅检查打开的文件
内容的提问来源于stack exchange,提问作者Rmn
相关产品推荐
相关产品推荐

