有人能帮助我理解为什么我得到一个类型错误与以下代码:
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.