有时我们喜欢将值存储在一个具有特定类型的阵列中。使用任何
类型当然可以解决这个问题,但它也将允许我们可能不想要的某些类型。
假设我们想要创建一个用户名
和一个用户ID
的用户
数组;
1let user: any;
2let userId = 1;
3let userName = "Alf";
4
5let randomBoolean = true;
6
7user = [userId, userName]; // valid
8user = [userId, randomBoolean]; // also valid
通过将我们的用户
设置为任何
类型,我们可以将任何类型分配给它,这打败了我们有一个用户ID
的目的,这是一个号码
和一个用户名
,这是一个字符串
类型。
1let user: [number,string];
2let userId = 1;
3let userName = "Alf";
4let randomBoolean = true;
5
6user = [userId, userName]; // valid
7user = [userId, randomBoolean]; // error: Type 'true' is not assignable to type 'string'
我们定义一个 tuple,将我们的预期类型放置在方块上,在这种情况下将一个数字
和一个字符串
分隔开来。
**True
类型不能分配给键入string
。
这是因为我们定义了我们的来接受一个字符串
,因为它是第二个输入,但我们通过了一个布尔
。
在 tuple 中访问元素
要访问一个tuple中的元素,我们会像在一个数组中一样使用它的索引。
1console.log(user[0]) // 1
2console.log(user[1]) // Alf
Tuples 变得非常有用,当我们想创建一个字典或一个关键值对. 使用我们从上面的例子,我们可以有一个用户名和他们的ID,而不会错误地通过一个不同的类型来创建问题后。
1let users: [number, string][] = [[1,"Alf"],[2,"Jane"],[3,"Nii"]];
<$>[注] 将值分配给一个tuple时,前两个值必须准确匹配tuple中定义的类型。
例如,在上面的例子中,我们的第一个元素必须是数字
,第二个元素必须是字符串
。
1let user: [number,string];
2user = ["Alf", 1]; // invalid
上面的代码是无效的,因为用户
希望第一个元素是数字
,第二个元素是字符串
,但不是相反。
<$>[注]我们将任何后续值添加到tuple变量可以是任何预定义tuple类型在没有特定的顺序。
1user[2] = "John"; // valid
2user[3] = 4; // valid
3user[4] = true; // invalid.
在上面的代码中,由于tuple被声明为数字
和字符串
,我们可以输入任何字符串
或数字
的元素,只要它们不是前两种元素,否则我们仍然不能将一个boolean
值分配给一个元素,因为tuple没有被声明为boolean
类型。
是的!希望你发现这篇文章有用。