本章从宏观角度介绍 TypeScript 的工作原理:典型的 TypeScript 项目结构是什么?如何编译以及编译什么?我们如何使用 IDE 编写 TypeScript 代码?
这是 TypeScript 项目的一种可能的目录结构
typescript-project/
dist/
ts/
src/
main.ts
util.ts
test/
util_test.ts
tsconfig.json
说明
ts/
包含 TypeScript 文件ts/src/
包含实际代码。ts/test/
包含代码的测试。dist/
是存储编译器输出的位置。ts/
中的 TypeScript 文件编译为 dist/
中的 JavaScript 文件。例如ts/src/main.ts
被编译为 dist/src/main.js
(以及可能的其他文件)tsconfig.json
用于配置 TypeScript 编译器。tsconfig.json
tsconfig.json
的内容如下所示
{
"compilerOptions": {
"rootDir": "ts",
"outDir": "dist",
"module": "commonjs",
···
}
}
我们已经指定了
ts/
。dist/
。两个流行的 JavaScript IDE 是
本节中的观察结果是关于 Visual Studio Code 的,但也可能适用于其他 IDE。
需要注意的一个重要事实是,Visual Studio Code 以两种独立的方式处理 TypeScript 源代码
tsc
有一个 --watch
模式,它会监视输入文件并在它们发生更改时将它们编译为输出文件。因此,每当我们在 IDE 中保存 TypeScript 文件时,我们都会立即获得相应的输出文件。tsc
。为此,它必须安装在我们当前正在处理的项目中或全局安装(通过 Node.js 包管理器 npm)。给定一个 TypeScript 文件 main.ts
,TypeScript 编译器可以生成几种工件。最常见的是
main.js
main.d.ts
(包含类型信息;可以理解为删除了 JavaScript 代码的 .ts
文件)main.js.map
TypeScript 通常不是通过 .ts
文件交付的,而是通过 .js
文件和 .d.ts
文件交付的
源映射为 main.js
中输出代码的每个部分指定了 main.ts
中输入代码的哪个部分生成了它。除其他外,此信息使运行时环境能够执行 JavaScript 代码,同时在错误消息中显示 TypeScript 代码的行号。
npm 注册表是一个巨大的 JavaScript 代码库。如果我们想在 TypeScript 中使用 JavaScript 包,我们需要它的类型信息
.d.ts
文件,甚至包含完整的 TypeScript 代码。DefinitelyTyped 的声明文件位于 @types
命名空间中。因此,如果我们需要一个包(例如 lodash
)的声明文件,我们必须安装 @types/lodash
包。
TypeScript 编译器也可以处理纯 JavaScript 文件
使用 --allowJs
选项,TypeScript 编译器会将输入目录中的 JavaScript 文件复制到输出目录。好处:当从 JavaScript 迁移到 TypeScript 时,我们可以从 JavaScript 和 TypeScript 文件的混合开始,并逐渐将更多 JavaScript 文件转换为 TypeScript。
使用 --checkJs
选项,编译器还会对 JavaScript 文件进行类型检查(此选项需要启用 --allowJs
才能工作)。鉴于可用信息的有限性,它会尽力而为。可以通过文件内部的注释来配置要检查哪些文件
// @ts-nocheck
,则不会对其进行类型检查。--checkJs
,则可以使用注释 // @ts-check
对单个 JavaScript 文件进行类型检查。TypeScript 编译器使用通过 JSDoc 注释指定的静态类型信息(请参阅下面的示例)。如果我们很彻底,我们可以对纯 JavaScript 文件进行完全静态类型化,甚至可以从中派生出声明文件。
使用 --noEmit
选项,编译器不会生成任何输出,它只对文件进行类型检查。
这是一个 JSDoc 注释的示例,它为函数 add()
提供了静态类型信息
/**
* @param {number} x - The first operand
* @param {number} y - The second operand
* @returns {number} The sum of both operands
*/
function add(x, y) {
+ y;
return x }
更多信息:TypeScript 手册中的JavaScript 文件的类型检查。