sumOfTwoNumbersInArray

sumOfTwoNumbersInArray

有人能帮助我理解为什么我得到一个类型错误与以下代码:

function sumOfTwoNumbersInArray(a: [number, number]) {
    return a[0] + a[1];
}

sumOfTwoNumbersInArray([1, 2]); // Works

let foo = [1, 2];
sumOfTwoNumbersInArray(foo); // Error

错误是:
类型“参数”的参数不可分配给类型[数,数]的参数。
类型“number[]'缺少类型“[number,number]”中的以下属性:0,1

最佳答案

a中的参数sumOfTwoNumbersInArray是一个元组。
它与number[]不同。
因为所有变量都是基本数组

function sumOfTwoNumbersInArray(a: number[]) { // parameter declared as array
  return a[0] + a[1];
}

let foo = [1, 2]; // initialization defaults to array

sumOfTwoNumbersInArray(foo); // no error.

正如rafael所提到的,显式地将foo定义为元组也可以。
function sumOfTwoNumbersInArray(a: [number, number]) { // parameter declared as a tuple
  return a[0] + a[1];
}

let foo: [number, number] = [1, 2]; // variable explicitely defined as a tuple

sumOfTwoNumbersInArray(foo); // no error.

09-18 00:47