在 TypeScript 中声明一个具有最小长度的数组
使用元组声明具有最小长度的数组,例如 let arrMinLength2: [string, string, ...string[]] = ['a', 'b']
。 元组类型允许我们表达一个包含固定数量元素的数组,这些元素的类型是已知的,但可以不同。
// ✅ First approach
let arrMinLength2: [string, string, ...string[]] = ['a', 'b'];
arrMinLength2 = ['a', 'b', 'c']; // ✅ OK
// ⛔️ Error: Source has 1 element(s) but target requires 2.
arrMinLength2 = ['a'];
// ✅ Second approach
type Tuple3<T> = [T, T, T];
type Tuple6<T> = [...Tuple3<T>, ...Tuple3<T>];
// ⛔️ Source has 2 element(s) but target requires 3.
const arrMinLength3: Tuple3<string> = ['a', 'b'];
在第一个示例中,我们声明了一个最小长度为 2 个字符串类型元素的元组。
...string[]
语法在元组类型中称为 Rest 元素,表示该元组是开放式的,可以具有零个或多个指定类型的附加元素。
例如,[string, ...boolean[]]
表示一个元组,其第一个元素为字符串,后跟任意数量的布尔元素。
元组可以包含 2 个以上的元素,但如果我们尝试用少于 2 个元素重新声明它,则会出现错误。
let arrMinLength2: [string, string, ...string[]] = ['a', 'b'];
arrMinLength2 = ['a', 'b', 'c']; // ✅ OK
// ⛔️ Error: Source has 1 element(s) but target requires 2.
arrMinLength2 = ['a'];
如果我们向数组中添加了正确数量的元素,但混淆了类型,也会出现错误。
let arrMinLength2: [string, string, ...string[]] = ['a', 'b'];
// ⛔️ Error: Type 'number' is not
// assignable to type 'string'.ts(2322)
arrMinLength2 = ['a', 4]; // ✅ OK
元组类型用于表示具有固定数量元素的数组,这些元素的类型是已知的,但可以不同。
话虽如此,元组由数组表示,我们仍然可以调用 pop()
方法从元组中删除元素。
const arrMinLength2: [string, string, ...string[]] = ['a', 'b'];
arrMinLength2.pop();
arrMinLength2.pop();
console.log(arrMinLength2); // 👉️ []
如果要防止这种情况发生,可以将元组声明为readonly
。
const arrMinLength2: readonly [string, string, ...string[]] = ['a', 'b'];
// ⛔️ Error: Property 'pop' does not exist
// on type 'readonly [string, string, ...string[]]'.ts(2339)
arrMinLength2.pop();
但这也意味着我们无法更改元组元素的值或添加更多元素。
或者,我们可以使用以下方法声明一个最小长度为 N 的数组。
type Tuple3<T> = [T, T, T];
type Tuple6<T> = [...Tuple3<T>, ...Tuple3<T>];
// ⛔️ Source has 2 element(s) but target requires 3.
const arrMinLength3: Tuple3<string> = ['a', 'b'];
当我们使用较长的数组时,这很有用,因为我们可以声明一个包含 N 个元素的元组,并使用扩展语法
...
根据需要多次将该元组解压缩为一个新元组。
如果我们需要声明一个最大长度为 N 的数组,请使用具有可选值的元组。
// ✅ Array of Max length
let arrOfMaxLength3: [string?, string?, string?] = [];
arrOfMaxLength3 = ['a', 'b', 'c']; // ✅ OK
arrOfMaxLength3 = ['a', 'b']; // ✅ OK
arrOfMaxLength3 = ['a']; // ✅ OK
// ⛔️ Error: Source has 4 element(s) but target allows only 3.
arrOfMaxLength3 = ['a', 'b', 'c', 'd'];
问号用于将元组中的值标记为可选。 示例中的元组最多可以有 3 个元素(除非你使用数组方法添加更多)。
相关文章
在 C 语言中获取字符数组的长度
发布时间:2023/05/07 浏览次数:166 分类:C语言
-
本文演示了如何在 C 语言中获取一个 char 数组的长度。使用 sizeof 运算符来查找字符数组的长度 数组的大小可以用 sizeof 运算符计算,而不考虑元素的数据类型。
如何在 C 语言中获取数组的大小
发布时间:2023/05/07 浏览次数:92 分类:C语言
-
本教程介绍了 C 语言中确定数组大小的方法。本教程介绍了在 C 语言中使用 sizeof()运算符的方法。
C 语言中复制字符数组
发布时间:2023/05/07 浏览次数:117 分类:C语言
-
本文介绍了如何在 C 语言中复制字符数组。使用 memcpy 函数在 C 语言中复制一个字符数组 char 数组可能是 C 代码中最常用的数据结构,复制数组内容是它的核心操作之一。
Django ArrayField 数组字段
发布时间:2023/05/04 浏览次数:168 分类:Python
-
在本文中,我们将学习在 Django 数据库模型中使用 ArrayFields。Django中的ArrayField类似于Java、C、C++等其他编程语言中的数组数据结构,存储相同数据类型的多个值。
计算 Java 数组中的重复元素
发布时间:2023/05/01 浏览次数:202 分类:Java
-
本篇文章介绍Java计算数组中重复元素的方法。计算 Java 数组中的重复元素。我们可以创建一个程序来计算数组中的重复元素。 该数组可以是未排序的,也可以是已排序的。
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 Angular 中使用 TypeScript 的 getElementById 替换
发布时间:2023/04/14 浏览次数:153 分类:Angular
-
本教程指南提供了有关使用 TypeScript 在 Angular 中替换 document.getElementById 的简要说明。这也提供了在 Angular 中 getElementById 的最佳方法。