在 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 就会知道该数组的内容在其声明和函数调用之间不会发生变化。