VSCode 中的工作区 TypeScript 版本与内置 TypeScript 版本

说明 VSCode 为什么同时存在工作区和内置两套 TypeScript 版本,以及它们分别适合什么场景。

#type / synthesis #status / growing #tech / dev #resource / vscode #resource / typescript

[!info] related notes

VSCode 中的工作区 TypeScript 版本与内置 TypeScript 版本

范围

这篇笔记只讨论 VSCode 在 JavaScript / TypeScript 语言服务里如何选择 TypeScript 版本,不讨论项目构建时到底用哪个打包器。

为什么要放在一起理解

很多人第一次看到这个菜单时会困惑:

  • Use Workspace Version
  • Use VS Code's Version

它们看起来只是“版本切换”,但实际上对应两种不同目标:

  • 一种优先保证编辑器开箱即用
  • 一种优先保证与当前项目配置一致

依赖路径 / 调用链 / 演进链

VSCode 自带 JavaScript / TypeScript 语言支持,因此即使你的项目没有本地安装 TypeScript,也能提供基本的编辑能力。

但如果工作区里存在本地 typescript 包,VSCode 也允许切到工作区版本,让编辑器的语言服务和项目依赖保持一致。

典型调用链可以理解为:

  1. VSCode 自带 TypeScript 语言能力
  2. 打开 JS/TS 文件后,语言服务需要决定用哪一套 TypeScript
  3. 如果工作区有本地版本,用户可以手动切换到工作区版本
  4. 之后补全、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 去编译项目

这两者可以一致,也可以不一致。

参考信息

创建于 2026/5/15 更新于 2026/5/27