Can someone help me understand why I get a type error with the following code:
function sumOfTwoNumbersInArray(a: [number, number]) {
return a[0] + a[1];
}
sumOfTwoNumbersInArray([1, 2]); // Works
let foo = [1, 2];
sumOfTwoNumbersInArray(foo); // Error
Run Code Online (Sandbox Code Playgroud)
The error is:
Argument of type 'number[]' is not assignable to parameter of type '[number, number]'.
Type 'number[]' is missing the following properties from type '[number, number]': 0, 1
The parameter a in sumOfTwoNumbersInArray is a tuple.
It is not the same as number[].
The following works okay because all variables are basic arrays
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.
Run Code Online (Sandbox Code Playgroud)
As Rafael mentioned, explicitly defining foo as a tuple works fine as well.
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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |