4
4
5
5
元组(tuple)是 TypeScript 特有的数据类型,JavaScript 没有单独区分这种类型。它表示成员类型可以自由设置的数组,即数组的各个成员的类型可以不同。
6
6
7
- 元组必须明确声明每个成员的类型 。
7
+ 由于成员的类型可以不一样,所以元组必须明确声明每个成员的类型 。
8
8
9
9
``` typescript
10
10
const s: [string , string , boolean ]
@@ -13,24 +13,26 @@ const s:[string, string, boolean]
13
13
14
14
上面示例中,元组` s ` 的前两个成员的类型是` string ` ,最后一个成员的类型是` boolean ` 。
15
15
16
- 元组类型的写法,与上一章的数组有一个重大差异。数组的成员类型写在方括号外面(` number[] ` ),元组的成员类型是写在方括号里面(` [number] ` )。
17
-
18
- TypeScript 的区分方法是,成员类型写在方括号里面的就是元组,写在外面的就是数组。
16
+ 元组类型的写法,与上一章的数组有一个重大差异。数组的成员类型写在方括号外面(` number[] ` ),元组的成员类型是写在方括号里面(` [number] ` )。TypeScript 的区分方法就是,成员类型写在方括号里面的就是元组,写在外面的就是数组。
19
17
20
18
``` typescript
21
- let a: [number ] = [1 ];
19
+ // 数组
20
+ let a: number [] = [1 ];
21
+
22
+ // 元组
23
+ let t: [number ] = [1 ];
22
24
```
23
25
24
- 上面示例中,变量` a ` 是一个元组,只有一个成员,类型是 ` number ` 。
26
+ 上面示例中,变量` a ` 和 ` t ` 的值都是 ` [1] ` ,但是它们的类型是不一样的。 ` a ` 是一个数组,成员类型 ` number ` 写在方括号外面; ` t ` 是一个元组,成员类型 ` number ` 写在方括号里面 。
25
27
26
28
使用元组时,必须明确给出类型声明(上例的` [number] ` ),不能省略,否则 TypeScript 会把一个值自动推断为数组。
27
29
28
30
``` typescript
29
- // a 的类型为 (number | boolean)[]
31
+ // a 的类型被推断为 (number | boolean)[]
30
32
let a = [1 , true ];
31
33
```
32
34
33
- 上面示例中,变量` a ` 的值其实是一个元组,但是 TypeScript 会将其推断为一个联合类型的数组,即` a ` 的类型为` (number | boolean)[] ` 。
35
+ 上面示例中,变量` a ` 的值其实是一个元组,但是 TypeScript 会将其推断为一个联合类型的数组,即` a ` 的类型为` (number | boolean)[] ` 。所以,元组必须显式给出类型声明。
34
36
35
37
元组成员的类型可以添加问号后缀(` ? ` ),表示该成员是可选的。
36
38
@@ -77,15 +79,15 @@ const b:NamedNums = ['B', 1, 2, 3];
77
79
78
80
上面示例中,元组类型` NamedNums ` 的第一个成员是字符串,后面的成员使用扩展运算符来展开一个数组,从而实现了不定数量的成员。
79
81
80
- 扩展运算符用在元组的任意位置都可以,但是它后面只能是数组或元组 。
82
+ 扩展运算符( ` ... ` )用在元组的任意位置都可以,它的后面只能是一个数组或元组 。
81
83
82
84
``` typescript
83
85
type t1 = [string , number , ... boolean []];
84
86
type t2 = [string , ... boolean [], number ];
85
87
type t3 = [... boolean [], string , number ];
86
88
```
87
89
88
- 上面示例中,扩展运算符分别在元组的尾部、中部和头部。
90
+ 上面示例中,扩展运算符分别在元组的尾部、中部和头部, ` ... ` 的后面是一个数组 ` boolean[] ` 。
89
91
90
92
如果不确定元组成员的类型和数量,可以写成下面这样。
91
93
@@ -95,6 +97,20 @@ type Tuple = [...any[]];
95
97
96
98
上面示例中,元组` Tuple ` 可以放置任意数量和类型的成员。但是这样写,也就失去了使用元组和 TypeScript 的意义。
97
99
100
+ 元组的成员可以添加成员名,这个成员名是说明性的,可以任意取名,没有实际作用。
101
+
102
+ ``` typescript
103
+ type Color = [
104
+ red : number ,
105
+ green : number ,
106
+ blue : number
107
+ ];
108
+
109
+ const c: Color = [255 , 255 , 255 ];
110
+ ```
111
+
112
+ 上面示例中,类型` Color ` 是一个元组,它有三个成员。每个成员都有一个名字,写在具体类型的前面,使用冒号分隔。这几个名字可以随便取,没有实际作用,只是用来说明每个成员的含义。
113
+
98
114
元组可以通过方括号,读取成员类型。
99
115
100
116
``` typescript
0 commit comments