我正在使用Visual Studio 2022处理一个包含Node应用程序的Web项目的现有解决方案。
在package.json
文件中,该应用程序配置为使用TypeScript 3.8.3 npm包。在一个TypeScript文件中,我使用了可选链语法,这应该是自TypeScript 3.7版本以来支持的,但是IDE将其标记为错误"TS1109:Expression expected"。如果相关的话,Node版本是14.17.0。 没有全局安装任何TypeScript版本。
此页面指出:
默认情况下,Visual Studio 2022提供JavaScript和TypeScript文件的语言支持,以驱动IntelliSense,无需任何特定的项目配置。
对于编译TypeScript,Visual Studio使您能够选择在每个项目上使用哪个版本的TypeScript。
在MSBuild编译方案中,TypeScript NuGet软件包是向项目添加TypeScript编译支持的推荐方法。Visual Studio将在您第一次向项目添加TypeScript文件时提供添加此软件包的选项。此软件包也可随时通过NuGet软件包管理器获得。当使用NuGet软件包时,相应的语言服务版本将用于支持您的项目。注意:此软件包的最低支持版本为3.6。
针对npm配置的项目可以通过添加TypeScript npm包来指定其自己的TypeScript语言服务版本。您可以在支持的项目中使用npm管理器指定版本。注意:此软件包的最低支持版本为2.1。
TypeScript SDK已在Visual Studio 2022中停用。依赖于SDK的现有项目应升级为使用NuGet软件包。对于无法立即升级的项目,SDK仍可在Visual Studio Marketplace和Visual Studio安装程序的可选组件中获取。
我的理解是,Visual Studio应该尊重npm包中指定的TypeScript版本。但是,由于某种原因,编辑器无法识别应在3.8中可用的语法。
我的理解是否正确?应该怎么做才能使Visual Studio 2022在.ts文件中识别可选链语法?
更新:由于显然问题不够清晰。
Visual Studio CODE 默认使用与其捆绑的 Typescript 版本来提供语言支持(请注意:您仍需要 tsc 编译器来实际编译代码)。如果项目的根文件夹或其他路径中安装了 Typescript 版本,则编辑器可以自动检测到它。
问题是如何在使用VS2022时获得类似的行为。为测试目的,我创建了一个新的空Angular项目。默认情况下,该项目配置为使用Typescript版本4+。我编辑了
package.json
文件以降级为3.5.1,并运行npm install以确保项目节点文件夹已更新。在这种情况下,即使项目现在使用TS 3.5.1(支持仅添加在3.7中),Intellisense仍然可以识别可选链接语法。比较两个项目文件,我可以看到另一个包括一个“Last”最后,我认为这是对旧sdk支持的引用。从我所看到的:
- 有 Last 似乎使Visual Studio 永远 不会识别可选链接语法,即使使用更新的 Typescript 版本
- 删除这一行似乎使 Visual Studio 总是 可以识别可选链接语法,即使使用旧的 Typescript 版本
再次强调问题很简单: 如何指示Visual Studio 2022使用在项目本地安装的Typescript版本,而不使用过时的外部sdk或者污染项目并试图覆盖VS默认行为的NuGet包?