如何在 TypeScript 中声明一个常量数组

在 TypeScript 中声明一个常量数组

How to declare a const array in TypeScript

使用 const 断言在 TypeScript 中声明一个 const 数组,例如
const arr = [10, 5] as const. Const 断言使我们能够将数组的元素设置为readonly,向语言表明表达式中的类型不会被扩大(例如 from[1, 2]number[])。

索引.ts
// 👇️ const arr: readonly [10, 5] const arr = [10, 5] as const; function multiply(a: number, b: number) { return a * b; } console.log(multiply(...arr)); // 👉️ 50

我们使用
const 断言
来声明一个 const 数组。

multiply函数完全2采用 type 的参数number,但我们有一个包含2数字的数组。

const 断言使我们能够告诉 TypeScript 数组只能包含2类型元素,number并且它将是2我们在声明数组时提供的确切数字。

数组的类型永远不会扩大,例如 from [10, 5]to number[]

示例中的数组变成了一个readonly元组,因此它的内容无法更改,我们可以在
multiply函数调用中安全地解压缩这两个数字。

您可以像访问任何其他数组的元素一样访问数组的元素。

索引.ts
// 👇️ const arr: readonly [10, 5] const arr = [10, 5] as const; console.log(arr[0]); // 👉️ 10 console.log(arr[1]); // 👉️ 5

如果您尝试更改数组的内容,则会出现错误。

索引.ts
// 👇️ const arr: readonly [10, 5] const arr = [10, 5] as const; // ⛔️ Error: Property 'push' does not exist on // type 'readonly [10, 5]'. arr.push(15);

我们使用了 const 断言,所以数组现在是一个readonly元组,其内容无法更改,并且尝试这样做会在开发过程中导致错误。

如果我们尝试在multiply不声明 const 断言的情况下调用该函数,则会出现错误。

索引.ts
const arr = [10, 5]; function multiply(a: number, b: number) { return a * b; } // ⛔️ Error: A spread argument must either have // a tuple type or be passed to a rest parameter. console.log(multiply(...arr)); // 👉️ 50

TypeScript 警告我们,没有办法知道数组的内容在它的声明和multiply
函数被调用之间没有改变。

如果我们使用 const 断言来声明一个 const 数组,TypeScript 就会知道该数组的内容在其声明和函数调用之间不会发生变化。

发表评论