JavaScript类型检查
由于 TypeScript 语言是 JavaScript 语言的超集,因此 JavaScript 程序是合法的 TypeScript 程序。TypeScript 编译器能够像处理 TypeScript 程序一样去处理 JavaScript 程序,例如对 JavaScript 程序执行类型检查和编译 JavaScript 程序。
本节将介绍如何配置 TypeScript 编译器,使其能够对 JavaScript 程序执行类型检查以及编译 JavaScript 程序。此外,我们还会介绍 TypeScript 编译器是如何从 JavaScript 文档工具 JSDoc 中提供类型信息的。
编译JavaScript
在一个工程中可能既存在 TypeScript 代码也存在 JavaScript 代码。例如,一个 Type-Script 工程依赖于某个 JavaScript 代码库,又或者一个工程正在从 JavaScript 向 TypeScript 进行迁移。如果 TypeScript 工程中的 JavaScript 程序也是工程的一部分,那么就需要使用 --allowJs
编译选项来配置 TypeScript 编译器。
在默认情况下,编译器只会将 .ts
和 .tsx
文件添加到编译文件列表,而不会将 .js
和 .jsx
文件添加到编译文件列表。如果想要让编译器去编译 JavaScript 文件,那么就需要启用 --allowJs
编译选项。在启用了 --allowJs
编译选项后,工程中的 .js
和 .jsx
文件也会被添加到编译文件列表。
假设当前工程目录结构如下:
C:\app
`-- src
`-- index.js
在 C:\app
目录下,运行 tsc
命令来编译 index.js
文件,示例如下:
tsc src/index.js
运行上述命令时会出现如下错误,因为在默认情况下,编译器不支持编译 JavaScript 文件:
error TS6054: 不支持'src/foo.js'文件的扩展名。
支持的扩展名为'.ts', '.tsx', '.d.ts'。
在 C:\app 目录下,运行 tsc
命令来编译 index.js
文件,并启用 --allowJs
编译选项。示例如下:
tsc src/index.js --allowJs --outDir dist
在启用了 --allowJs
编译选项后,编译器能够像编译 TypeScript 文件一样去编译 JavaScript 文件。此例中,我们还必须指定一个除 C:\app\src 之外的目录作为输出文件目录,否则编译器将报错。因为如果在 C:\app\src 目录下生成编译后的 index.js 文件,那么它将会覆盖源 index.js 文件,这是不允许的。
JSDoc与类型
JSDoc 是一款知名的为 JavaScript 代码添加文档注释的工具。JSDoc 利用了 JavaScript 语言中的多行注释语法并结合使用特殊的 JSDoc标签 来为代码添加丰富的描述信息。
在使用 JSDoc 时,有以下两个基本要求:
-
代码注释必须以
/**
开始,其中星号(*
)的数量必须为两个。若使用了/*
、/***
或其他形式的多行注释,则 JSDoc 会忽略该条注释。 -
代码注释与它描述的代码处于相邻的位置,并且注释在上,代码在下。
下例中,使用 JSDoc 描述了 sayHello 函数能够接受一个 string 类型的参数。其中,@param 是一个 JSDoc 标签,如下所示:
/**
* @param {string} somebody
*/
function sayHello(somebody) {
alert('Hello ' + somebody);
}
TypeScript 编译器既能够自动推断出大部分 JavaScript 代码的类型信息,也能够从 JSDoc 中提取类型信息。接下来,我们将介绍 TypeScript 编译器支持的部分 JSDoc 标签。