如何强制 Visual Studio Code 始终对所有项目使用工作区的 TypeScript 版本?

Sha*_*ful 10 visual-studio-code

每次我在 Visual Studio Code 中打开一个新项目时,它都会默认使用自己的 TypeScript 版本,而不是工作区的版本。有没有办法默认使用工作区版本,这样我就不必每次都更改它?

\n

例如,

\n

更改为工作区版本

\n

我尝试查看设置,似乎只能提示我\xe2\x80\x94none 每次都默认为我想要的行为。

\n

如何强制 Visual Studio Code 始终对所有项目使用工作区的 TypeScript 版本?

\n

sta*_*all 15

我认为在撰写本文时(当最新的 VS Code 版本为 1.83 时)您目前可以做的最好的事情是(在settings.json中):

"typescript.tsdk": "./node_modules/typescript/lib",
// ^ pretty sure this needs to go in workspace settings

"typescript.enablePromptUseWorkspaceTsdk": true,
// ^ this can go in user settings, but you may as well put it in each
//   workspace's settings so collaborators don't need to know about it.
Run Code Online (Sandbox Code Playgroud)

设置的说明分别为:

lib*.d.ts指定TypeScript 安装下用于 IntelliSense 的tsserver 和文件的文件夹路径,例如: ./node_modules/typescript/lib

  • 当指定为用户设置时,TypeScript 版本会typescript.tsdk自动替换内置 TypeScript 版本。
  • 当指定为工作区设置时,typescript.tsdk允许您通过命令切换到使用该工作区版本的 TypeScript for IntelliSense TypeScript: Select TypeScript version

有关管理 TypeScript 版本的更多详细信息,请参阅TypeScript 文档。


启用提示用户使用工作区中配置的 TypeScript 版本进行 Intellisense。

实际上,您可以在用户 settings.json 文件中使用该设置,而不仅仅是工作区 .vscode/settings.json 文件。似乎无论你把它放在哪里,相对路径都会被视为相对于当前工作区文件夹。

目前没有设置可以让工作区在没有提示的情况下使用工作区的 TypeScript SDK。

从我的快速测试来看,在用户设置中使用相对于当前工作区的路径(而不是工作区设置)是行不通typescript.tsdk的(不幸的是,因为用户设置是根据文档自动进行的,我认为这意味着它不会需要提示)。

至于目前的原因,在typescript.enablePromptUseWorkspaceTsdk设置存在之前(虽然我假设评论的逻辑今天仍然适用),维护者曾经评论过

我们支持typescript.tsdk在工作区设置中进行设置,但出于安全原因,我们始终要求用户选择使用工作区版本的打字稿。这就是本地存储发挥作用的地方。

后来详细阐述

提示基本上是在问:您是否信任此工作区以及它来自哪里。TypeScript 的工作区版本还可以执行工作区中的其他文件,因此我们无法合理确保 VS Code 只运行受信任的文件。我们默认做安全的事情:不从工作区加载任何内容。无论如何,切换到从工作区加载任何代码都必须是选择加入的,并且必须基于用户操作。

这里最合理的解决方案是添加一个工作区设置,当用户首次打开工作区时自动显示选择 tsdk 提示

事情就是这样typescript.enablePromptUseWorkspaceTsdk发生的


您可能会对一个功能请求感兴趣:VSCode 应默认在当前项目中使用 TypeScript 版本 #172732

引用一位维护者对该功能请求的回复

我们之前已经讨论过这个问题,但出于以下几个原因决定不这样做:

  • TS 的工作区版本往往会过时。旧 TS 版本存在错误和性能问题,我们的捆绑版本通常已修复这些问题。我们不会对旧 TS 版本进行任何修复,并且这些旧版本的问题报告通常也没有帮助

  • 虽然在某些情况下使用不同的 TS 版本进行编辑与编译很重要,但通常情况并非如此。

    在你的注释中:

    VSCode 更新 TypeScript 版本非常慢

    VS Code 的稳定版本通常会在一到两周内获取最新的稳定 Typescript。最新的 TS 通常会在一天后出现在 VS Code 内部人员中。听起来您的情况似乎是在尝试使用即将推出的 TS beta 或 RC 中的功能

    我认为对于需要立即使用最新 TS 的高级用户来说,切换到使用 TS 的工作区版本并不是一个很大的障碍

折衷方案是您已经调用的设置:typescript.enablePromptUseWorkspaceTsdk。这使得高级用户更容易切换,而不会影响绝大多数不需要切换到工作区版本的用户的体验(对于他们来说切换实际上可能会导致更糟糕的用户体验)

这是您可能感兴趣的另一个功能请求:将工作区信任与 enablePromptUseWorkspaceTsdk #135713 结合起来。引用该功能请求:

现在我们在 VSCode 中拥有工作区信任功能。单独的提示感觉enablePromptUseWorkspaceTsdk有点多余。typescript.tsdk当用户已经信任工作区时,我们可以自动遵守工作区设置吗?

这不会降低安全性,并且使得typescript.tsdk在我们庞大的开发者用户群中分发变得更加容易。

其中有讨论讨论和实现它(带有一些阻塞设计问题)(请参阅),以及 Pull Request 草案:fix(typescript-language-features): tsdk trust #190057