请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答 回答被采纳积分+3

1回答

keviny79 2021-08-31 00:10:21

//  可以写成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 回复 有任何疑惑可以回复我~
  • 提问者 慕粉1319182 #1
    明白了,谢谢老师解答
    回复 有任何疑惑可以回复我~ 2021-08-31 09:40:13
  • 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 22:58:02
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信