迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > TypeScript >

在 TypeScript 中声明一个具有最小长度的数组

作者:迹忆客 最近更新:2022/12/11 浏览次数:

使用元组声明具有最小长度的数组,例如 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'];

TypeScript 中声明一个具有最小长度的数组

在第一个示例中,我们声明了一个最小长度为 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

typescript 混淆了类型出现错误

元组类型用于表示具有固定数量元素的数组,这些元素的类型是已知的,但可以不同。

话虽如此,元组由数组表示,我们仍然可以调用 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();

TypeScript readonly 错误

但这也意味着我们无法更改元组元素的值或添加更多元素。

或者,我们可以使用以下方法声明一个最小长度为 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 个元素(除非你使用数组方法添加更多)。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C 语言中获取字符数组的长度

发布时间:2023/05/07 浏览次数:166 分类:C语言

本文演示了如何在 C 语言中获取一个 char 数组的长度。使用 sizeof 运算符来查找字符数组的长度 数组的大小可以用 sizeof 运算符计算,而不考虑元素的数据类型。

在 C 语言中初始化字符数组

发布时间:2023/05/07 浏览次数:158 分类:C语言

本文介绍了如何在 C 语言中初始化字符数组。使用 {} 卷曲括号列表符号在 C 语言中初始化一个字符数组

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 数组中的重复元素。我们可以创建一个程序来计算数组中的重复元素。 该数组可以是未排序的,也可以是已排序的。

MATLAB 数组大小限制

发布时间:2023/04/23 浏览次数:92 分类:MATLAB

本教程将讨论如何使用 MATLAB 中的 memory 命令检查内存限制和数组的最大大小。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便