转译 TypeScript
TypeScript 是 JavaScript 的一个类型化超集,它可以转译为纯 JavaScript。它提供了类、模块和接口,帮助您构建健壮的组件。
安装 TypeScript 编译器
Visual Studio Code 包含 TypeScript 语言支持,但不包含 TypeScript 编译器 tsc。你需要全局或在工作区中安装 TypeScript 编译器,以便将 TypeScript 源代码转译为 JavaScript (tsc HelloWorld.ts)。
安装 TypeScript 最简单的方法是通过 npm,即 Node.js 包管理器。如果你已安装 npm,可以通过以下方式在你的计算机上全局安装 (-g) TypeScript
npm install -g typescript
您可以通过检查版本或查看帮助来测试安装是否成功。
tsc --version
tsc --help
另一个选择是在您的项目中本地安装 TypeScript 编译器 (npm install --save-dev typescript),这样做的好处是避免与您可能拥有的其他 TypeScript 项目产生潜在的冲突。
编译器与语言服务
请务必记住,VS Code 的 TypeScript 语言服务与您安装的 TypeScript 编译器是相互独立的。当您打开 TypeScript 文件时,可以在语言状态栏中看到 VS Code 使用的 TypeScript 版本。

您可以使用固定图标将 TypeScript 版本固定到状态栏。
在本文的后续部分,我们将讨论如何更改 VS Code 所使用的 TypeScript 语言服务版本。
tsconfig.json
通常,任何新 TypeScript 项目的第一步是添加一个 tsconfig.json 文件。tsconfig.json 文件定义了 TypeScript 的项目设置,例如编译器选项和应包含的文件。要执行此操作,请打开您要存储源代码的文件夹并添加一个名为 tsconfig.json 的新文件。进入此文件后,IntelliSense (⌃Space (Windows, Linux Ctrl+Space)) 将为您提供帮助。

一个用于 ES5、CommonJS 模块和源映射的简单 tsconfig.json 如下所示
{
"compilerOptions": {
"target": "ES5",
"module": "CommonJS",
"sourceMap": true
}
}
现在,当您创建作为项目一部分的 .ts 文件时,我们将提供丰富的编辑体验和语法验证。
将 TypeScript 转译为 JavaScript
VS Code 通过其集成的任务运行器与 tsc 集成。我们可以利用这一点将 .ts 文件转译为 .js 文件。使用 VS Code 任务的另一个好处是,您可以在问题面板中获得集成的错误和警告检测。让我们通过转译一个简单的 TypeScript Hello World 程序来演示。
第 1 步:创建一个简单的 TS 文件
在一个空文件夹中打开 VS Code 并创建一个 helloworld.ts 文件,将以下代码放入该文件中...
let message: string = 'Hello World';
console.log(message);
为了测试您是否正确安装了 TypeScript 编译器 tsc 并且 Hello World 程序可以正常工作,请打开终端并输入 tsc helloworld.ts。您可以直接在 VS Code 中使用集成终端 (⌃` (Windows, Linux Ctrl+`))。
现在您应该会看到已转译的 helloworld.js JavaScript 文件。如果您安装了 Node.js,可以通过输入 node helloworld.js 来运行它。

第 2 步:运行 TypeScript 构建
在全局终端菜单中执行运行构建任务 (⇧⌘B (Windows, Linux Ctrl+Shift+B))。如果您在前面的部分创建了 tsconfig.json 文件,系统应会显示以下选择器

选择 tsc: build 条目。这将在工作区中生成 HelloWorld.js 和 HelloWorld.js.map 文件。
如果您选择 tsc: watch,TypeScript 编译器将监视您的 TypeScript 文件更改,并在每次更改时运行转译器。
在后台,我们将 TypeScript 编译器作为任务运行。我们使用的命令是:tsc -p .
第 3 步:将 TypeScript 构建设为默认任务
您还可以将 TypeScript 构建任务定义为默认构建任务,以便在触发运行构建任务 (⇧⌘B (Windows, Linux Ctrl+Shift+B)) 时直接执行它。为此,请从全局终端菜单中选择配置默认构建任务。这将显示一个包含可用构建任务的选择器。选择 TypeScript tsc: build,它将在 .vscode 文件夹中生成以下 tasks.json 文件
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"type": "typescript",
"tsconfig": "tsconfig.json",
"problemMatcher": [
"$tsc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
请注意,该任务有一个 group JSON 对象,它将任务 kind 设置为 build 并将其设为默认任务。现在,当您选择运行构建任务命令或按 (⇧⌘B (Windows, Linux Ctrl+Shift+B)) 时,系统不会提示您选择任务,而是直接开始编译。
提示: 您还可以使用 VS Code 的运行/调试功能来运行程序。有关在 VS Code 中运行和调试 Node.js 应用程序的详细信息,可以在 Node.js 教程中找到。
第 4 步:审查构建问题
VS Code 任务系统还可以通过问题匹配器检测构建问题。问题匹配器根据特定的构建工具解析构建输出,并提供集成的错误显示和导航功能。VS Code 附带了许多问题匹配器,上面在 tasks.json 中看到的 $tsc 就是用于 TypeScript 编译器输出的问题匹配器。
例如,如果在我们的 TypeScript 文件中存在一个简单的错误(在 console.log 中多了一个 'g'),我们可能会从 tsc 获得以下输出
HelloWorld.ts(3,17): error TS2339: Property 'logg' does not exist on type 'Console'.
这会显示在终端面板 (⌃` (Windows, Linux Ctrl+`)) 中,并且您可以在终端视图下拉菜单中选择 Tasks - build tsconfig.json。
您可以在状态栏中查看错误和警告的数量。点击错误和警告图标可获取问题列表并导航到它们。

您也可以使用键盘打开列表 ⇧⌘M (Windows, Linux Ctrl+Shift+M)。
提示: 任务为许多操作提供了丰富的支持。查看任务主题以了解有关如何配置它们的更多信息。
JavaScript 源映射 (Source Map) 支持
TypeScript 调试支持 JavaScript 源映射。要为您的 TypeScript 文件生成源映射,请使用 --sourcemap 选项进行编译,或将 tsconfig.json 文件中的 sourceMap 属性设置为 true。
同时也支持内联源映射(一种将内容存储为数据 URL 而非单独文件的源映射),尽管目前尚不支持内联源代码。
生成文件的输出位置
在大型项目中,如果将生成的 JavaScript 文件与 TypeScript 源文件放在同一文件夹中,很快就会变得杂乱无章。您可以使用 outDir 属性指定编译器的输出目录。
{
"compilerOptions": {
"target": "ES5",
"module": "CommonJS",
"outDir": "out"
}
}
隐藏派生的 JavaScript 文件
当您使用 TypeScript 时,通常不希望在文件资源管理器或搜索结果中看到生成的 JavaScript 文件。VS Code 通过 files.exclude 工作区设置提供了过滤功能,您可以轻松创建一个表达式来隐藏这些派生文件
**/*.js: { "when": "$(basename).ts" }
此模式将匹配任何 JavaScript 文件 (**/*.js),但前提是存在同名的 TypeScript 文件。如果 JavaScript 文件被编译到相同位置,文件资源管理器将不再显示这些派生资源。

通过工作区 settings.json 文件中的过滤器添加 files.exclude 设置,该文件位于工作区根目录的 .vscode 文件夹中。您可以通过命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中的 首选项:打开工作区设置 (JSON) 命令打开工作区 settings.json。
要排除由 .ts 和 .tsx 源文件生成的 JavaScript 文件,请使用以下表达式
"files.exclude": {
"**/*.js": { "when": "$(basename).ts" },
"**/**.js": { "when": "$(basename).tsx" }
}
这算是一个小技巧。搜索全局模式 (glob patterns) 被用作键。上面的设置使用了两个不同的全局模式来提供两个唯一的键,但搜索结果仍会匹配相同的文件。
使用较新的 TypeScript 版本
VS Code 附带了一个最新的稳定版 TypeScript 语言服务,并默认使用它在您的工作区中提供 IntelliSense。工作区的 TypeScript 版本独立于您用于编译 *.ts 文件的 TypeScript 版本。在大多数常见情况下,您可以直接使用 VS Code 内置的 TypeScript 版本进行 IntelliSense,无需担心,但有时您可能需要更改 VS Code 用于 IntelliSense 的 TypeScript 版本。
执行此操作的原因包括:
- 通过切换到 TypeScript 每夜构建版本 (
typescript@next) 来尝试最新的 TypeScript 功能。 - 确保您用于 IntelliSense 的 TypeScript 版本与用于编译代码的版本一致。
当前的 TypeScript 版本及其安装位置可以显示在状态栏中。选择语言栏状态栏项 ({ }),然后选择 TypeScript 版本的固定图标,使其保持在状态栏中可见。

如果您想更改工作区中的默认 TypeScript 版本,有几种选择
使用工作区的 TypeScript 版本
如果您的工作区有特定的 TypeScript 版本,您可以通过打开一个 TypeScript 或 JavaScript 文件并点击状态栏中的 TypeScript 版本号,在工作区版本的 TypeScript 和 VS Code 默认使用的版本之间进行切换。系统将弹出一个消息框,询问您 VS Code 应该使用哪个版本的 TypeScript

使用此功能可在 VS Code 自带的 TypeScript 版本和您工作区中的 TypeScript 版本之间进行切换。您还可以通过 TypeScript: 选择 TypeScript 版本命令触发 TypeScript 版本选择器。
VS Code 将自动检测安装在工作区根目录下 node_modules 中的 TypeScript 版本。您还可以通过在用户或工作区设置中配置 js/ts.tsdk.path 来显式告诉 VS Code 使用哪个版本的 TypeScript。js/ts.tsdk.path 设置应指向包含 TypeScript tsserver.js 文件的目录。您可以使用 npm list -g typescript 找到全局 TypeScript 的安装位置。tsserver.js 文件通常位于 lib 文件夹中。
例如
{
"js/ts.tsdk.path": "/usr/local/lib/node_modules/typescript/lib"
}
提示: 要获取特定的 TypeScript 版本,请在 npm 安装期间指定
@version。例如,对于 TypeScript 3.6.0,您可以使用npm install --save-dev typescript@3.6.0。要预览 TypeScript 的下一个版本,请运行npm install --save-dev typescript@next。
请注意,尽管在这些示例中 js/ts.tsdk.path 指向 typescript 内的 lib 目录,但 typescript 目录必须是一个包含 TypeScript package.json 文件的完整 TypeScript 安装。
您还可以通过添加指向 tsserver.js 文件所在目录的 js/ts.tsdk.path 工作区设置,告诉 VS Code 在特定工作区中使用特定版本的 TypeScript
{
"js/ts.tsdk.path": "./node_modules/typescript/lib"
}
js/ts.tsdk.path 工作区设置仅告知 VS Code 存在工作区版本的 TypeScript。要实际开始将该工作区版本用于 IntelliSense,您必须运行 TypeScript: 选择 TypeScript 版本命令并选择该工作区版本。
使用 TypeScript 每夜构建版本
在 VS Code 中体验最新 TypeScript 功能的最简单方法是安装 JavaScript and TypeScript Nightly 扩展。
此扩展会自动将 VS Code 的内置 TypeScript 版本替换为最新的 TypeScript 每夜构建版本。如果您已通过 TypeScript: 选择 TypeScript 版本命令配置了 TypeScript 版本,请务必切换回使用 VS Code 的 TypeScript 版本。
混合 TypeScript 和 JavaScript 项目
可以同时拥有 TypeScript 和 JavaScript 混合项目。要在 TypeScript 项目中启用 JavaScript,可以在 tsconfig.json 中将 allowJs 属性设置为 true。
提示:
tsc编译器不会自动检测jsconfig.json文件的存在。请使用–p参数让tsc使用您的jsconfig.json文件,例如tsc -p jsconfig.json。
大型项目开发
如果您正在处理包含成百上千个 TypeScript 文件的代码库,这里有一些步骤可以帮助您改善 VS Code 中的编辑体验以及命令行上的编译时间。
确保您的 tsconfig 仅包含您关心的文件
在项目的 tsconfig.json 中使用 include 或 files,确保项目仅包含应属于该项目的文件。
更多关于配置项目 tsconfig.json 的信息。
使用项目引用拆分您的项目
与其将源代码构建为一个单一的大型项目,不如使用项目引用将其拆分为较小的项目,这样可以提高性能。这允许 TypeScript 一次仅加载代码库的一个子集,而不是加载整个代码库。
有关如何使用项目引用及其最佳实践的详细信息,请参阅 TypeScript 文档。
后续步骤
继续阅读以了解:
- 编辑 TypeScript - TypeScript 的特定编辑功能。
- 重构 TypeScript - TypeScript 语言服务提供的有用重构。
- 调试 TypeScript - 为您的 TypeScript 项目配置调试器。
常见问题
如何解决 TypeScript “无法编译外部模块 (Cannot compile external module)” 错误?
如果遇到该错误,请通过在项目根文件夹中创建 tsconfig.json 文件来解决。tsconfig.json 文件允许您控制 Visual Studio Code 如何编译您的 TypeScript 代码。有关更多信息,请参阅 tsconfig.json 概述。
为什么我在 VS Code 中看到的错误和警告与我编译 TypeScript 项目时看到的不同?
VS Code 附带了一个最新的稳定版 TypeScript 语言服务,它可能与您计算机上全局安装或在工作区中本地安装的 TypeScript 版本不匹配。因此,您可能会发现编译器输出与活动的 TypeScript 语言服务检测到的错误之间存在差异。有关安装匹配的 TypeScript 版本的详细信息,请参阅使用较新的 TypeScript 版本。
我可以使用 VS 2022 自带的 TypeScript 版本吗?
不能,Visual Studio 2019 和 2022 附带的 TypeScript 语言服务与 VS Code 不兼容。您需要从 npm 安装一个单独的 TypeScript 版本。
为什么有些错误被报告为警告?
默认情况下,VS Code TypeScript 将代码样式问题显示为警告而不是错误。这适用于:
- 变量已声明但从未使用
- 属性已声明但其值从未被读取
- 检测到无法访问的代码
- 未使用的标签
- switch 语句中的 fall-through 情况
- 并非所有代码路径都有返回值
将这些视为警告与其他工具(如 TSLint)保持一致。当您从命令行运行 tsc 时,这些仍会显示为错误。
您可以通过在用户设置中将 "js/ts.reportStyleChecksAsWarnings": false 设置为来禁用此行为。