每次执行git commit后VS Code的Typescript IntelliSense异常如何解决?
多tsconfig项目提交后VS Code TS报错解决方案
调整ESLint解析器配置
- 给@typescript-eslint/parser设置独立的配置规则,避免运行时修改项目原有tsconfig文件触发VS Code的配置监听。在ESLint配置文件中新增如下参数:
module.exports = { parser: '@typescript-eslint/parser', parserOptions: { tsconfigRootDir: __dirname, project: ['./**/tsconfig.json'], EXPERIMENTAL_useProjectService: false } }
- 也可以单独创建
tsconfig.eslint.json作为ESLint校验专用配置,和项目业务用的tsconfig完全隔离,ESLint仅读取该配置,不会触发VS Code对业务配置的变更检测。
隔离Husky钩子的运行环境
- 在pre-commit钩子中添加TS相关环境变量,禁用文件监听能力,避免运行过程中修改TS缓存标记:
#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" TSC_NONPOLLING_WATCHER=false TSC_WATCHFILE=NoPolling npx lint-staged
- 提交代码时优先使用系统独立终端,不要使用VS Code内置终端,避免VS Code监听到终端内的配置读取操作。
固定VS Code的TS匹配规则
- 在工作区配置文件
.vscode/settings.json中添加如下配置,强制TS服务器按目录就近匹配tsconfig,不会全局切换配置:
{ "typescript.tsc.autoDetect": "off", "typescript.workspaceSymbols.scope": "currentProject", "typescript.enablePromptUseWorkspaceTsdk": false }
- 根目录新增tsconfig.json,用references字段明确关联所有子目录的配置,告知TS服务器各子项目的配置边界:
{ "files": [], "references": [ { "path": "./packages/sub-project1" }, { "path": "./packages/sub-project2" } // 补充所有子项目路径 ] }
提交时临时控制TS服务器
如果需要临时规避问题,可以通过VS Code命令行工具在提交前后重启TS服务器,需要先将code命令加入系统PATH,修改pre-commit钩子如下:
#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" # 校验前重启TS服务器暂停监听 code --command typescript.restartTsServer # 运行校验 npx lint-staged # 校验通过后再次重启恢复正常使用 code --command typescript.restartTsServer
内容的提问来源于stack exchange,提问作者Leo Jiang
相关产品推荐
相关产品推荐

