Skip to content

Commit e05a44b

Browse files
committedJul 31, 2023
docs: finish chapter tsconfig.json
1 parent fe8da65 commit e05a44b

File tree

7 files changed

+56
-113
lines changed

7 files changed

+56
-113
lines changed
 

‎chapters.yml

+4
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,7 @@
2121
- operator.md: 运算符
2222
- mapping.md: 类型映射
2323
- utility.md: 类型工具
24+
- comment.md: 注释指令
25+
- tsconfig.json.md: tsconfig.json 文件
26+
- tsc.md: tsc 命令
27+

‎docs/comment.md

+5-4
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ let isChecked = true;
2727
console.log(isChceked); // 报错
2828
```
2929

30-
上面示例是一个 JavaScript 脚本,`// @ts-check`告诉 TypeScript 编译器对其进行类型检查,所以最后一行会报错。
30+
上面示例是一个 JavaScript 脚本,`// @ts-check`告诉 TypeScript 编译器对其进行类型检查,所以最后一行会报错,提示拼写错误
3131

3232
## `// @ts-ignore`
3333

3434
`// @ts-ignore``// @ts-expect-error`,告诉编译器不对下一行代码进行类型检查,可以用于 TypeScript 脚本,也可以用于 JavaScript 脚本。
3535

3636
```typescript
3737
let x:number;
38-
38+
3939
x = 0;
4040

4141
// @ts-expect-error
@@ -65,9 +65,9 @@ function sayHello(somebody) {
6565
}
6666
```
6767

68-
上面示例中,注释里面的`@param`是一个 JSDoc 命令,表示下面的函数`sayHello()`的参数`somebody`类型为`string`
68+
上面示例中,注释里面的`@param`是一个 JSDoc 声明,表示下面的函数`sayHello()`的参数`somebody`类型为`string`
6969

70-
TypeScript 编译器支持的大部分的 JSDoc 命令,下面介绍其中的一些。
70+
TypeScript 编译器支持大部分的 JSDoc 声明,下面介绍其中的一些。
7171

7272
### @typedef
7373

@@ -210,3 +210,4 @@ class Base {
210210
y = 0;
211211
}
212212
```
213+

‎docs/narrowing.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ function getScore(value: number|string): number {
2424
}
2525
```
2626

27-
2827
如果一个值是`any``unknown`,你又想对它进行处理,就必须先缩小类型。
2928

3029
```typescript
@@ -300,4 +299,5 @@ function getElementContent(el: HTMLElement) {
300299
function isDefined<T>(x: T | undefined): x is T {
301300
return x !== undefined;
302301
}
303-
```
302+
```
303+

‎docs/npm.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,5 @@ $ npm publish
8484

8585
## 参考链接
8686

87-
- [How to Write a TypeScript Library](https://www.tsmean.com/articles/how-to-write-a-typescript-library/), by tsmean
87+
- [How to Write a TypeScript Library](https://www.tsmean.com/articles/how-to-write-a-typescript-library/), by tsmean
88+

‎docs/react.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,5 @@ function ComponentFoo(prop: FooProp) {
7979
const Button = (prop: { value: string }, context: { color: string }) => (
8080
<button />
8181
);
82-
```
82+
```
83+

‎docs/tsconfig.json.md

+41-95
Original file line numberDiff line numberDiff line change
@@ -27,82 +27,57 @@ $ tsc -p ./dir
2727
}
2828
```
2929

30-
- include:读入`src`目录中的所有文件。
31-
- allowJs:接受 JavaScript 文件作为输入。
32-
- outDir:输出的编译结果放在`built`目录。
33-
- target:编译产物的 JS 版本为 ECMAScript 5。
30+
本章后面会详细介绍`tsconfig.json`的各个属性,这里简单说一下,上面示例的四个属性的含义。
3431

35-
下面是它的一些基本属性。
32+
- include:指定哪些文件需要编译。
33+
- allowJs:指定源目录的 JavaScript 文件是否原样拷贝到编译后的目录。
34+
- outDir:指定编译产物存放的目录。
35+
- target:指定编译产物的 JS 版本。
3636

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`参数自动生成。
6538

6639
```bash
6740
$ tsc --init
6841
```
6942

70-
tsc命令的运行结果是在当前目录下新生成了一个“tsconfig.json”配置文件,里面有一些默认配置
43+
上面命令生成的`tsconfig.json`文件,里面会有一些默认配置
7144

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`为例。
7348

7449
```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
7853
```
7954

80-
安装以后,就可以在`tsconfig.json`里面引用这个设置
55+
安装以后,就可以在`tsconfig.json`里面引用这个模块,相当于继承它的设置,然后进行扩展
8156

8257
```json
8358
{
84-
"extends": "@tsconfig/deno/tsconfig.json"
59+
"extends": "@tsconfig/deno/tsconfig.json"
8560
}
8661
```
8762

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`的二级属性,按照首字母排序。
8966

9067
## exclude
9168

9269
`exclude`属性是一个数组,必须与`include`属性一起使用,用来从编译列表中去除指定的文件。它也支持使用与`include`属性相同的通配符。
9370

9471
```typescript
9572
{
96-
"include": ["**/*"],
97-
"exclude": ["**/*.spec.ts"]
73+
"include": ["**/*"],
74+
"exclude": ["**/*.spec.ts"]
9875
}
9976
```
10077

10178
## extends
10279

103-
`tsconfig.json`可以继承另一个`tsconfig.json`文件的配置。
104-
105-
如果一个项目有多个配置,可以把共同的配置写成`tsconfig.base.json`,其他的配置文件继承该文件,这样便于维护和修改。
80+
`tsconfig.json`可以继承另一个`tsconfig.json`文件的配置。如果一个项目有多个配置,可以把共同的配置写成`tsconfig.base.json`,其他的配置文件继承该文件,这样便于维护和修改。
10681

10782
`extends`属性用来指定所要继承的配置文件。它可以是本地文件。
10883

@@ -122,13 +97,13 @@ yarn add --dev @tsconfig/deno
12297
}
12398
```
12499

125-
`extends`指定的依赖会先加载,然后加载当前配置。如果当前配置与继承的配置有重名的属性,前者会覆盖后者
100+
`extends`指定的`tsconfig.json`会先加载,然后加载当前的`tsconfig.json`。如果两者有重名的属性,后者会覆盖前者
126101

127102
## files
128103

129-
`files`指定编译的文件列表,如果其中有一个文件不存在,就会报错。
104+
`files`属性指定编译的文件列表,如果其中有一个文件不存在,就会报错。
130105

131-
它的文件列表是一个数组,排在前面的文件先编译。
106+
它是一个数组,排在前面的文件先编译。
132107

133108
```javascript
134109
{
@@ -183,37 +158,7 @@ yarn add --dev @tsconfig/deno
183158

184159
## compileOptions
185160

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`属性用来定制编译行为。这个属性可以省略,这时编译器将使用默认设置。
217162

218163
### allowJs
219164

@@ -329,7 +274,7 @@ import { helloWorld } from "hello/world";
329274

330275
### emitBOM
331276

332-
`emitBOM`设置是否在编译结果的文件头添加字节顺序标志 BOM默认值是`false`
277+
`emitBOM`设置是否在编译结果的文件头添加字节顺序标志 BOM默认值是`false`
333278

334279
### emitDeclarationOnly
335280

@@ -350,7 +295,7 @@ moment(); // 报错
350295

351296
上面示例中,根据 ES6 规范,`import * as moment`里面的`moment`是一个对象,不能当作函数调用,所以第二行报错了。
352297

353-
解决方法就是改写上面的语句,`import *`改成加载默认接口。
298+
解决方法就是改写上面的语句,改成加载默认接口。
354299

355300
```typescript
356301
import moment from 'moment'
@@ -398,7 +343,7 @@ obj.foo = undefined; // 报错
398343

399344
### isolatedModules
400345

401-
`isolatedModules`设置如果当前 TypeScript 脚本作为单个模块编译,是否会因为缺少其他脚本的类型信息而报错。
346+
`isolatedModules`设置如果当前 TypeScript 脚本作为单个模块编译,是否会因为缺少其他脚本的类型信息而报错,主要便于非官方的编译工具(比如 Babel)正确编译单个脚本
402347

403348
### jsx
404349

@@ -428,7 +373,7 @@ obj.foo = undefined; // 报错
428373
}
429374
```
430375

431-
TypeScript 内置的类型描述文件,主要有一些,可以参考 [TypeScript 源码](https://github.com/microsoft/TypeScript/tree/main/src/lib)
376+
TypeScript 内置的类型描述文件,主要有以下一些,完整的清单可以参考 [TypeScript 源码](https://github.com/microsoft/TypeScript/tree/main/src/lib)
432377

433378
- ES5
434379
- ES2015
@@ -464,9 +409,9 @@ TypeScript 内置的类型描述文件,主要有一些,可以参考 [TypeScr
464409

465410
```javascript
466411
{
467-
"compilerOptions": {
468-
"listFiles": true
469-
}
412+
"compilerOptions": {
413+
"listFiles": true
414+
}
470415
}
471416
```
472417

@@ -540,7 +485,7 @@ TypeScript 内置的类型描述文件,主要有一些,可以参考 [TypeScr
540485
### noFallthroughCasesInSwitch
541486

542487
`noFallthroughCasesInSwitch`设置是否对没有`break`语句(或者`return``throw`语句)的 switch 分支报错,即`case`代码里面必须有终结语句(比如`break`)。
543-
488+
544489
### noImplicitAny
545490

546491
`noImplicitAny`设置当一个表达式没有明确的类型描述、且编译器无法推断出具体类型时,是否允许将它推断为`any`类型。
@@ -569,7 +514,7 @@ TypeScript 内置的类型描述文件,主要有一些,可以参考 [TypeScr
569514

570515
### outFile
571516

572-
`outFile`设置将所有非模块的全局文件,编译在同一个文件里面。它只有在`module`属性为`None``System``AMD`时才生效,并且不能用来打包 CommonJS 或 ES6 模块。
517+
`outFile`设置将所有非模块的全局文件,编译在同一个文件里面。它只有在`module`属性为`None``System``AMD`时才生效,并且不能用来打包 CommonJS 或 ES6 模块。
573518

574519
### paths
575520

@@ -623,7 +568,7 @@ TypeScript 内置的类型描述文件,主要有一些,可以参考 [TypeScr
623568

624569
### resolveJsonModule
625570

626-
`resolveJsonModule`运行 import 命令导入 JSON 文件。
571+
`resolveJsonModule`允许 import 命令导入 JSON 文件。
627572

628573
### rootDir
629574

@@ -718,9 +663,9 @@ const n = fn.call(undefined, false);
718663
function fn(x:string) {
719664
console.log('Hello, ' + x.toLowerCase());
720665
}
721-
666+
722667
type StringOrNumberFunc = (ns:string|number) => void;
723-
668+
724669
// 打开 strictFunctionTypes,下面代码会报错
725670
let func:StringOrNumberFunc = fn;
726671
```
@@ -791,7 +736,7 @@ class User {
791736
constructor(public username:string) {}
792737
}
793738

794-
// 解决方法四:赋值断言
739+
// 解决方法四:赋值断言
795740
class User {
796741
username!:string;
797742

@@ -855,7 +800,7 @@ class User {
855800

856801
### types
857802

858-
`types`设置`node_modules/@types`目录下需要包括在编译之中的类型模块。默认情况下,该目录下的所有类型模块,都会自动包括在编译之中。
803+
`types`设置`typeRoots`目录下需要包括在编译之中的类型模块。默认情况下,该目录下的所有类型模块,都会自动包括在编译之中。
859804

860805
```typescript
861806
{
@@ -893,4 +838,5 @@ try {
893838

894839
## 参考链接
895840

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+

‎docs/type-operations.md

-10
Original file line numberDiff line numberDiff line change
@@ -290,13 +290,3 @@ interface B {
290290
}
291291
```
292292

293-
## 字符串操作类型
294-
295-
- Uppercase: Converts a string literal type to uppercase.
296-
• Lowercase: Converts a string literal type to lowercase.
297-
• Capitalize: Converts a first character of string literal type to uppercase.
298-
• Uncapitalize: Converts a first character of string literal type to lowercase.
299-
300-
```typescript
301-
type FormalGreeting = Capitalize<"hello.">; // Type: "Hello."
302-
```

0 commit comments

Comments
 (0)
Please sign in to comment.