From 52ae89a4f00c70314e3976bef8f91a612f6dc518 Mon Sep 17 00:00:00 2001 From: ruanyf Date: Sun, 16 Jul 2023 12:03:33 +0800 Subject: [PATCH] docs: finish chapter Array --- chapters.yml | 1 + docs/array.md | 17 ++++++++--------- docs/types.md | 2 ++ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/chapters.yml b/chapters.yml index 915e109..f17d1b3 100644 --- a/chapters.yml +++ b/chapters.yml @@ -2,3 +2,4 @@ - basic.md: 基本用法 - any.md: any 类型,unknown 类型,never 类型 - types.md: 类型系统 +- array.md: 数组 diff --git a/docs/array.md b/docs/array.md index 984d743..c034703 100644 --- a/docs/array.md +++ b/docs/array.md @@ -14,7 +14,7 @@ TypeScript 数组有一个根本特征:所有成员的类型必须相同,但 let arr:number[] = [1, 2, 3]; ``` -上面示例中,数组`arr`的类型是`number[]`,其中`number`表示成员类型是`number`。 +上面示例中,数组`arr`的类型是`number[]`,其中`number`表示数组成员类型是`number`。 如果数组成员的类型比较复杂,可以写在圆括号里面。 @@ -26,7 +26,7 @@ let arr:(number|string)[]; 这个例子里面的圆括号是必须的,否则因为竖杠(`|`)的优先级低于`[]`,TypeScript 会把`number|string[]`理解成`number`和`string[]`的联合类型。 -如果数组成员可以是任意类型,则写成`any[]`。当然,这种写法是应该避免的。 +如果数组成员可以是任意类型,写成`any[]`。当然,这种写法是应该避免的。 ```typescript let arr:any[]; @@ -73,7 +73,7 @@ arr // [1, 2] 上面示例中,数组增加成员或减少成员,都是可以的。 -正是由于成员数量可以动态变化,所以 TypeScript 不会对数组边界进行检查,如果越界访问数组并不会报错。 +正是由于成员数量可以动态变化,所以 TypeScript 不会对数组边界进行检查,越界访问数组并不会报错。 ```typescript let arr:number[] = [1, 2, 3]; @@ -98,13 +98,11 @@ type Names = string[]; type Name = Names[number]; // string ``` -上面示例中,`Names[number]`表示元组`Names`所有数值索引的成员类型,所以返回`string`。 +上面示例中,`Names[number]`表示数组`Names`所有数值索引的成员类型,所以返回`string`。 ## 数组的类型推断 -如果数组变量没有声明类型,TypeScript 就会推断数组成员的类型。 - -这时,推断行为会因为值的不同,而有所不同。 +如果数组变量没有声明类型,TypeScript 就会推断数组成员的类型。这时,推断行为会因为值的不同,而有所不同。 如果变量的初始值是空数组,那么 TypeScript 会推断数组类型是`any[]`。 @@ -150,9 +148,9 @@ arr[0] = 2; 上面示例中,修改`const`命令声明的数组的成员是允许的。 -但是,很多时候确实有声明只读数组的需求,即不允许变动数组成员。 +但是,很多时候确实有声明为只读数组的需求,即不允许变动数组成员。 -TypeScript 允许声明只读数组,方法是在在数组类型前面加上`readonly`关键字。 +TypeScript 允许声明只读数组,方法是在数组类型前面加上`readonly`关键字。 ```typescript const arr:readonly number[] = [0, 1]; @@ -232,3 +230,4 @@ var multi:number[][] = ``` 上面示例中,变量`multi`的类型是`number[][]`,表示它是一个二维数组,最底层的数组成员类型是`number`。 + diff --git a/docs/types.md b/docs/types.md index 3a53ade..a88142f 100644 --- a/docs/types.md +++ b/docs/types.md @@ -768,3 +768,5 @@ a = b; // 报错 上面示例中,`hi`是`string`的子类型,`string`是`hi`的父类型。所以,变量`a`可以赋值给变量`b`,但是反过来就会报错。 +之所以有这样的规则,是因为子类型继承了父类型的所有特征,所以可以用在父类型的场合。但是,子类型还可能有一些父类型没有的特征,所以父类型不能用在子类型的场合。 +