// 可以写成any[]或any,
// ===>但在下文这个案例中如果不希望数组的元素值在函数内部被修改就要用元组
// 1. 使用可变元组作为tail函数arr参数类型 【tail函数内部无法修改arr元素的值】
function tail(arr: readonly [any, ...any[]]) {
// arr[0] = 999//无法分配到 "0" ,因为它是只读属性
let [first, ...rest] = arr;
return rest;
}
console.log(tail(constnum5));
// 2.使用any作为tail6函数参数类型
let constnum6 = [10, 30, 40, 60, "abc"] as const
// readonly等效于as const
// any参数
function tail6(arr: any) {
arr[1] = 999;// 值被修改成999,但有时我们并不希望数组的值被修改
//arr[0] = 33
let [first, ...rest] = arr;
return rest;
}
// 输出tail6(constnum6) [ 999, 40, 60, 'abc' ]
console.log("tail6(constnum6)", tail6(constnum6));
// 3. 使用any[] 作为tail7函数参数类型,产生了两个问题
let constnum7 = [10, 30, 40, 60, "abc"] as const
// readonly等效于as const
function tail7(arr: any[]) {
arr[1] = 999;// 问题1:值被修改成999,但有时我们并不希望数组的值被修改
//arr[0] = 33
let [first, ...rest] = arr;
return rest;
}
//问题2:编译错误: 类型 "readonly [10, 30, 40, 60, "abc"]" 为 "readonly",不能分配给可变类型 "any[]"
console.log("tail6(constnum6)", tail7(constnum7));