这是我参与「第五届青训营 」伴学笔记创作活动的第 2天
TypeScript 介绍
-
TypeScript 是 JavaScript 的超集,提供了 JavaScript 的所有功能,并提供了可选的静态类型、Mixin、类、接口和泛型等特性。
-
TypeScript 的目标是通过其类型系统帮助及早发现错误并提高 JavaScript 开发效率。
-
通过 TypeScript 编译器或 Babel 转码器转译为 JavaScript 代码,可运行在任何浏览器,任何操作系统。
-
任何现有的 JavaScript 程序都可以运行在 TypeScript 环境中,并只对其中的 TypeScript 代码进行编译。
-
在完整保留 JavaScript 运行时行为的基础上,通过引入静态类型定义来提高代码的可维护性,减少可能出现的 bug。
-
永远不会改变 JavaScript 代码的运行时行为,例如数字除以零等于 Infinity。这意味着,如果将代码从 JavaScript 迁移到 TypeScript ,即使 TypeScript 认为代码有类型错误,也可以保证以相同的方式运行。
-
对 JavaScript 类型进行了扩展,增加了例如
any、unknown、never、void。 -
一旦 TypeScript 的编译器完成了检查代码的工作,它就会 擦除 类型以生成最终的“已编译”代码。这意味着一旦代码被编译,生成的普通 JS 代码便没有类型信息。这也意味着 TypeScript 绝不会根据它推断的类型更改程序的 行为。最重要的是,尽管可能会在编译过程中看到类型错误,但类型系统自身与程序如何运行无关。
-
在较大型的项目中,可以在单独的文件 tsconfig.json 中声明 TypeScript 编译器的配置,并细化地调整其工作方式、严格程度、以及将编译后的文件存储在何处。
编译选项
TypeScript 提供了很多不同功能的编译选项,既可以通过配置 tsconfig.json 文件中的 compilerOptions 属性来实现编译,也可以使用在 tsc 命令后跟随参数这种形式,直接编译 .ts 文件。
以下这些选项可以同时在命令行和 tsconfig.json 里使用。
tsconfig.json
- 可以通过
tsc --init命令在根目录生成tsconfig.json文件。 - 目录中存在
tsconfig.json文件表示该目录是 TypeScript 项目的根目录。 tsconfig.json文件指定编译项目所需的根文件和编译器选项,主要有以下配置项:
{
"compilerOptions": {},
"files": [
"core.ts",
"index.ts",
"types.ts"
],
"exclude": [
"node_modules",
"lib",
"**/*.test.ts"
],
"include": [
"src/**/*"
],
"extends": "@tsconfig/recommended/tsconfig.json"
}
复制代码
-
compilerOptions- 对象类型,用来设置编译选项,若不设置则默认使用上述编译选项的默认配置。 -
files- 指定一个包含相对或绝对文件路径的列表,不支持 glob 匹配模式。 -
include- 指定一个文件 glob 匹配模式列表。 -
exclude- 排除一个文件 glob 匹配模式列表。 -
extends- 字符串类型,指向另一个要继承的配置文件的路径。例如,可以继承一个推荐配置npm i @tsconfig/recommended,"extends": "@tsconfig/recommended/tsconfig.json"。- 如果有同名配置,继承文件里的配置会覆盖源文件里的配置。
- 配置文件里的相对路径在解析时相对于它所在的文件。
glob 通配符有:
*匹配 0 或多个字符(不包括目录分隔符)?匹配一个任意字符(不包括目录分隔符)**/递归匹配任意子目录
-
如果一个 glob 模式里的某部分不包含文件扩展名(只包含
*或.*),那么仅有支持的文件扩展名类型被包含在内(默认情况下为 .ts、.tsx 和 .d.ts),如果allowJs设置为true,也包括 .js 和 .jsx。 -
如果
files和include都没有被指定,编译器默认包含当前目录和子目录下所有的 TypeScript 文件(.ts、.tsx 和 .d.ts),排除在exclude里指定的文件。 -
如果同时指定了
files或include,编译器会将它们结合一并包含进来。 -
使用
include引入的文件可以使用exclude属性过滤。然而,通过files属性明确指定的文件却总是会被包含在内,不管exclude如何设置。 -
使用
outDir指定的目录下的文件永远会被编译器排除,除非明确地使用files将其包含进来(这时就算用exclude指定也没用)。 -
如果没有特殊指定,
exclude默认情况下会排除 node_modules、bower_components、jspm_packages 和outDir目录。 -
任何被
files或include指定的文件所引用的文件也会被包含进来。例如,A.ts引用了B.ts,因此B.ts不能被排除,除非引用它的A.ts在exclude列表中。 -
编译器不会去引入那些可能作为输出的文件。例如,我们包含了
index.ts,那么index.d.ts和index.js会被排除在外。 -
优先级:命令行配置 >
files>exclude>include。