@@ -27,82 +27,57 @@ $ tsc -p ./dir
27
27
}
28
28
```
29
29
30
- - include:读入` src ` 目录中的所有文件。
31
- - allowJs:接受 JavaScript 文件作为输入。
32
- - outDir:输出的编译结果放在` built ` 目录。
33
- - target:编译产物的 JS 版本为 ECMAScript 5。
30
+ 本章后面会详细介绍` tsconfig.json ` 的各个属性,这里简单说一下,上面示例的四个属性的含义。
34
31
35
- 下面是它的一些基本属性。
32
+ - include:指定哪些文件需要编译。
33
+ - allowJs:指定源目录的 JavaScript 文件是否原样拷贝到编译后的目录。
34
+ - outDir:指定编译产物存放的目录。
35
+ - target:指定编译产物的 JS 版本。
36
36
37
- - include:指定包含哪些文件夹或文件
38
- - exclude:排除哪些文件夹或文件。
39
-
40
- ``` typescript
41
- {
42
- " include" :[
43
- " ./folder"
44
- ],
45
- " exclude" :[
46
- " ./folder/**/*.spec.ts" ,
47
- " ./folder/someSubFolder"
48
- ]
49
- }
50
- ```
51
-
52
- - files:指定编译哪些文件
53
-
54
- ``` typescript
55
- {
56
- " files" :[
57
- " ./some/file.ts"
58
- ]
59
- }
60
- ```
61
-
62
- 在运行tsc命令时,若没有使用“--project”或“-p”编译选项,那么编译器将在tsc命令的运行目录下查找是否存在文件名为“tsconfig.json”的配置文件。若存在“tsconfig.json”配置文件,则使用该配置文件来编译工程;若不存在,则继续在父级目录下查找“tsconfig.json”配置文件,直到搜索到系统根目录为止;如果最终也未能找到一个可用的“tsconfig.json”配置文件,那么就会停止编译工程。
63
-
64
- TypeScript提供了一个“--init”编译选项,在命令行上运行tsc命令并使用“--init”编译选项会初始化一个“tsconfig.json”配置文件。
37
+ ` tsconfig.json ` 文件可以不必手写,使用 tsc 命令的` --init ` 参数自动生成。
65
38
66
39
``` bash
67
40
$ tsc --init
68
41
```
69
42
70
- tsc命令的运行结果是在当前目录下新生成了一个“ tsconfig.json”配置文件,里面有一些默认配置 。
43
+ 上面命令生成的 ` tsconfig.json ` 文件,里面会有一些默认配置 。
71
44
72
- 你也可以使用其他项目的 tsconfig.json 文件。 @tsconfig /, such as ` @tsconfig/recommended ` or @tsconfig/node16 .
45
+ 你也可以使用别人预先写好的 tsconfig.json 文件,npm 的` @tsconfig ` 名称空间下面有很多模块,都是写好的` tsconfig.json ` 样本,比如 ` @tsconfig/recommended ` 和` @tsconfig/node16 ` 。
46
+
47
+ 这些模块需要安装,以` @tsconfig/deno ` 为例。
73
48
74
49
``` bash
75
- npm install --save-dev @tsconfig/deno
76
- # or
77
- yarn add --dev @tsconfig/deno
50
+ $ npm install --save-dev @tsconfig/deno
51
+ # 或者
52
+ $ yarn add --dev @tsconfig/deno
78
53
```
79
54
80
- 安装以后,就可以在` tsconfig.json ` 里面引用这个设置 。
55
+ 安装以后,就可以在` tsconfig.json ` 里面引用这个模块,相当于继承它的设置,然后进行扩展 。
81
56
82
57
``` json
83
58
{
84
- "extends" : " @tsconfig/deno/tsconfig.json"
59
+ "extends" : " @tsconfig/deno/tsconfig.json"
85
60
}
86
61
```
87
62
88
- @tsconfig 包含的完整 tsconfig 文件目录可以查看 https://github.com/tsconfig/bases/tree/main/bases。
63
+ ` @tsconfig ` 空间下包含的完整 tsconfig 文件目录,可以查看 [ GitHub] ( https://github.com/tsconfig/bases/tree/main/bases ) 。
64
+
65
+ ` tsconfig.json ` 的一级属性并不多,只有很少几个,但是` compilerOptions ` 属性有很多二级属性。下面先逐一介绍一级属性,然后再介绍` compilerOptions ` 的二级属性,按照首字母排序。
89
66
90
67
## exclude
91
68
92
69
` exclude ` 属性是一个数组,必须与` include ` 属性一起使用,用来从编译列表中去除指定的文件。它也支持使用与` include ` 属性相同的通配符。
93
70
94
71
``` typescript
95
72
{
96
- " include" : [" **/*" ],
97
- " exclude" : [" **/*.spec.ts" ]
73
+ " include" : [" **/*" ],
74
+ " exclude" : [" **/*.spec.ts" ]
98
75
}
99
76
```
100
77
101
78
## extends
102
79
103
- ` tsconfig.json ` 可以继承另一个` tsconfig.json ` 文件的配置。
104
-
105
- 如果一个项目有多个配置,可以把共同的配置写成` tsconfig.base.json ` ,其他的配置文件继承该文件,这样便于维护和修改。
80
+ ` tsconfig.json ` 可以继承另一个` tsconfig.json ` 文件的配置。如果一个项目有多个配置,可以把共同的配置写成` tsconfig.base.json ` ,其他的配置文件继承该文件,这样便于维护和修改。
106
81
107
82
` extends ` 属性用来指定所要继承的配置文件。它可以是本地文件。
108
83
@@ -122,13 +97,13 @@ yarn add --dev @tsconfig/deno
122
97
}
123
98
```
124
99
125
- ` extends ` 指定的依赖会先加载,然后加载当前配置。如果当前配置与继承的配置有重名的属性,前者会覆盖后者 。
100
+ ` extends ` 指定的 ` tsconfig.json ` 会先加载,然后加载当前的 ` tsconfig.json ` 。如果两者有重名的属性,后者会覆盖前者 。
126
101
127
102
## files
128
103
129
- ` files ` 指定编译的文件列表 ,如果其中有一个文件不存在,就会报错。
104
+ ` files ` 属性指定编译的文件列表 ,如果其中有一个文件不存在,就会报错。
130
105
131
- 它的文件列表是一个数组 ,排在前面的文件先编译。
106
+ 它是一个数组 ,排在前面的文件先编译。
132
107
133
108
``` javascript
134
109
{
@@ -183,37 +158,7 @@ yarn add --dev @tsconfig/deno
183
158
184
159
## compileOptions
185
160
186
- ` compilerOptions ` 属性用来定制编译行为。
187
-
188
- 这个属性可以省略,这时编译器将使用默认设置。
189
-
190
- ``` javascript
191
- {
192
- " compilerOptions" : {
193
- " rootDir" : " ./src" ,
194
- " outDir" : " ./build" ,
195
- " lib" : [ " es2021" , " esnext" ],
196
- " target" : " es2021" ,
197
- " module" : " esnext" ,
198
- " esModuleInterop" : true ,
199
- " moduleResolution" : " Node"
200
- }
201
- }
202
- ```
203
-
204
- 示例
205
-
206
- ``` json
207
- {
208
- "compilerOptions" : {
209
- "target" : " es5" ,
210
- "moduleResolution" : " node" ,
211
- "module" : " esnext" ,
212
- "strict" : true ,
213
- "importHelpers" : true
214
- }
215
- }
216
- ```
161
+ ` compilerOptions ` 属性用来定制编译行为。这个属性可以省略,这时编译器将使用默认设置。
217
162
218
163
### allowJs
219
164
@@ -329,7 +274,7 @@ import { helloWorld } from "hello/world";
329
274
330
275
### emitBOM
331
276
332
- ` emitBOM ` 设置是否在编译结果的文件头添加字节顺序标志 BOM。 默认值是` false ` 。
277
+ ` emitBOM ` 设置是否在编译结果的文件头添加字节顺序标志 BOM, 默认值是` false ` 。
333
278
334
279
### emitDeclarationOnly
335
280
@@ -350,7 +295,7 @@ moment(); // 报错
350
295
351
296
上面示例中,根据 ES6 规范,` import * as moment ` 里面的` moment ` 是一个对象,不能当作函数调用,所以第二行报错了。
352
297
353
- 解决方法就是改写上面的语句,将 ` import * ` 改成加载默认接口。
298
+ 解决方法就是改写上面的语句,改成加载默认接口。
354
299
355
300
``` typescript
356
301
import moment from ' moment'
@@ -398,7 +343,7 @@ obj.foo = undefined; // 报错
398
343
399
344
### isolatedModules
400
345
401
- ` isolatedModules ` 设置如果当前 TypeScript 脚本作为单个模块编译,是否会因为缺少其他脚本的类型信息而报错。
346
+ ` isolatedModules ` 设置如果当前 TypeScript 脚本作为单个模块编译,是否会因为缺少其他脚本的类型信息而报错,主要便于非官方的编译工具(比如 Babel)正确编译单个脚本 。
402
347
403
348
### jsx
404
349
@@ -428,7 +373,7 @@ obj.foo = undefined; // 报错
428
373
}
429
374
```
430
375
431
- TypeScript 内置的类型描述文件,主要有一些,可以参考 [ TypeScript 源码] ( https://github.com/microsoft/TypeScript/tree/main/src/lib ) 。
376
+ TypeScript 内置的类型描述文件,主要有以下一些,完整的清单可以参考 [ TypeScript 源码] ( https://github.com/microsoft/TypeScript/tree/main/src/lib ) 。
432
377
433
378
- ES5
434
379
- ES2015
@@ -464,9 +409,9 @@ TypeScript 内置的类型描述文件,主要有一些,可以参考 [TypeScr
464
409
465
410
``` javascript
466
411
{
467
- " compilerOptions" : {
468
- " listFiles" : true
469
- }
412
+ " compilerOptions" : {
413
+ " listFiles" : true
414
+ }
470
415
}
471
416
```
472
417
@@ -540,7 +485,7 @@ TypeScript 内置的类型描述文件,主要有一些,可以参考 [TypeScr
540
485
### noFallthroughCasesInSwitch
541
486
542
487
` noFallthroughCasesInSwitch ` 设置是否对没有` break ` 语句(或者` return ` 和` throw ` 语句)的 switch 分支报错,即` case ` 代码里面必须有终结语句(比如` break ` )。
543
-
488
+
544
489
### noImplicitAny
545
490
546
491
` noImplicitAny ` 设置当一个表达式没有明确的类型描述、且编译器无法推断出具体类型时,是否允许将它推断为` any ` 类型。
@@ -569,7 +514,7 @@ TypeScript 内置的类型描述文件,主要有一些,可以参考 [TypeScr
569
514
570
515
### outFile
571
516
572
- ` outFile ` 设置将所有非模块的全局文件,编译在同一个文件里面。它只有在` module ` 属性为` None ` 、` System ` 、` AMD ` 时才生效,并且不能用来打包 CommonJS 或 ES6 模块。
517
+ ` outFile ` 设置将所有非模块的全局文件,编译在同一个文件里面。它只有在` module ` 属性为` None ` 、` System ` 、` AMD ` 时才生效,并且不能用来打包 CommonJS 或 ES6 模块。
573
518
574
519
### paths
575
520
@@ -623,7 +568,7 @@ TypeScript 内置的类型描述文件,主要有一些,可以参考 [TypeScr
623
568
624
569
### resolveJsonModule
625
570
626
- ` resolveJsonModule ` 运行 import 命令导入 JSON 文件。
571
+ ` resolveJsonModule ` 允许 import 命令导入 JSON 文件。
627
572
628
573
### rootDir
629
574
@@ -718,9 +663,9 @@ const n = fn.call(undefined, false);
718
663
function fn(x : string ) {
719
664
console .log (' Hello, ' + x .toLowerCase ());
720
665
}
721
-
666
+
722
667
type StringOrNumberFunc = (ns : string | number ) => void ;
723
-
668
+
724
669
// 打开 strictFunctionTypes,下面代码会报错
725
670
let func: StringOrNumberFunc = fn ;
726
671
```
@@ -791,7 +736,7 @@ class User {
791
736
constructor (public username : string ) {}
792
737
}
793
738
794
- // 解决方法四:赋值断言
739
+ // 解决方法四:赋值断言
795
740
class User {
796
741
username! : string ;
797
742
@@ -855,7 +800,7 @@ class User {
855
800
856
801
### types
857
802
858
- ` types ` 设置` node_modules/@types ` 目录下需要包括在编译之中的类型模块。默认情况下,该目录下的所有类型模块,都会自动包括在编译之中。
803
+ ` types ` 设置` typeRoots ` 目录下需要包括在编译之中的类型模块。默认情况下,该目录下的所有类型模块,都会自动包括在编译之中。
859
804
860
805
``` typescript
861
806
{
@@ -893,4 +838,5 @@ try {
893
838
894
839
## 参考链接
895
840
896
- - [ Strict Property Initialization in TypeScript] ( https://mariusschulz.com/blog/strict-property-initialization-in-typescript ) , Marius Schulz
841
+ - [ Strict Property Initialization in TypeScript] ( https://mariusschulz.com/blog/strict-property-initialization-in-typescript ) , Marius Schulz
842
+
0 commit comments