老师请问let [x,...y]:[...any[]]=customnum2 为什么不直接写成let [x,...y]:any[]=customnum2 呢

来源:7-19 【 TypeScript4 新特性】 深入可变元组

慕粉1319182

2021-08-30

写回答

1回答

keviny79

2021-08-31

//  可以写成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));


0
2
weixin_慕仰5248519
let constNum7 = [10, 30, 40, 60, "abc"] as const // readonly等效于as const function tail7(arr: readonly any[]) { arr[1] = 999;// 问题1:值被修改成999,但有时我们并不希望数组的值被修改 //arr[0] = 33 let [first, ...rest] = arr; return rest; } console.log("tail7(constNum7)", tail7(constNum7)); 这里我发现不用元组也可以,直接readonly any[]
2022-04-25
共2条回复

晋级TypeScript高手,成为抢手的前端开发人才

轻松驾驭 TypeScript 高级用法, 突破前端成长瓶颈

871 学习 · 425 问题

查看课程