Typescript [number, number] vs number[]

Sea*_*ean 2 typescript

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

Ven*_*CKi 5

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)