VSCode 中的工作区 TypeScript 版本与内置 TypeScript 版本
说明 VSCode 为什么同时存在工作区和内置两套 TypeScript 版本,以及它们分别适合什么场景。
#type / synthesis
#status / growing
#tech / dev
#resource / vscode
#resource / typescript
[!info] related notes
- 所属 MOC: TypeScript MOC
- 相关概念: Vscode, TypeScript 语言服务与 tsserver
- 易混淆概念: 编辑器、TypeScript 版本与 tsconfig 诊断结果的关系
- 相关资源: vscode的TS-JS语言服务频繁崩溃问题
VSCode 中的工作区 TypeScript 版本与内置 TypeScript 版本
范围
这篇笔记只讨论 VSCode 在 JavaScript / TypeScript 语言服务里如何选择 TypeScript 版本,不讨论项目构建时到底用哪个打包器。
为什么要放在一起理解
很多人第一次看到这个菜单时会困惑:
Use Workspace VersionUse VS Code's Version
它们看起来只是“版本切换”,但实际上对应两种不同目标:
- 一种优先保证编辑器开箱即用
- 一种优先保证与当前项目配置一致
依赖路径 / 调用链 / 演进链
VSCode 自带 JavaScript / TypeScript 语言支持,因此即使你的项目没有本地安装 TypeScript,也能提供基本的编辑能力。
但如果工作区里存在本地 typescript 包,VSCode 也允许切到工作区版本,让编辑器的语言服务和项目依赖保持一致。
典型调用链可以理解为:
- VSCode 自带 TypeScript 语言能力
- 打开 JS/TS 文件后,语言服务需要决定用哪一套 TypeScript
- 如果工作区有本地版本,用户可以手动切换到工作区版本
- 之后补全、hover、诊断等都会跟着这套版本变化
如果 VSCode 没有自动识别到工作区 TypeScript,还可以通过工作区设置显式告诉它本地 tsserver.js 所在目录,例如:
{
"js/ts.tsdk.path": "./node_modules/typescript/lib"
}
旧资料里常见的 typescript.tsdk 仍可能出现,但按 VSCode 近年的设置整理方向,优先记新的 js/ts.* 写法更稳。
对比与易混淆点
内置 TypeScript 版本
特点:
- 开箱即用
- 不要求项目先安装本地
typescript - 可能比你的项目依赖更新
适合:
- 临时阅读代码
- 小型脚本目录
- 还没固定 TypeScript 版本的项目
代价:
- 诊断结果可能比项目真实构建环境更超前
- 更容易出现“编辑器报错,但 CI 还没报”的情况
工作区 TypeScript 版本
特点:
- 使用项目
node_modules/typescript - 更接近项目真实编译环境
- 更适合定位“为什么项目里就是这样报错”
适合:
- 有锁定 TS 版本的仓库
- 团队协作项目
- 需要对齐 CI、构建机和本地编辑器的场景
不是谁更“正确”,而是谁更贴近你的目标
- 想获得最新语言服务体验:内置版本可能更快
- 想和仓库构建结果一致:工作区版本通常更稳
因此团队项目里,默认优先使用工作区版本更实用。
另外要注意,VSCode 官方文档明确区分了两件事:
- 用哪一版 TypeScript 做 IntelliSense
- 你实际用哪一版 TypeScript 去编译项目
这两者可以一致,也可以不一致。
参考信息
- VS Code TypeScript compiling: https://code.visualstudio.com/docs/typescript/typescript-compiling
- VS Code bundled language features overview: https://code.visualstudio.com/api/language-extensions/overview
- VS Code additional components: https://code.visualstudio.com/docs/setup/additional-components