TypeScript может быть очень конкретным в том, что он ожидает передать в метод.
Для вашего примера:
function f([first, second]: [number, number]){
console.log(first);
console.log(second);
}
Это будет работать:
var x: [number, number] = [1,2];
f([1,2]); // Type is implied: [number, number]
f(x); // Type is explicit: [number, number]
Это не будет:
var x = [1,2,3];
var y = [1,2];
var z: number[] = [1,2];
f(x); // Type is implied: number[]
f(y); // Type is implied: number[]
f(z); // Type is explicit: number[]
Вы сказали машинописи ожидайте массив, содержащий 2 числа.Вот почему он не будет принимать что-либо , кроме массива, содержащего 2 числа.
Вы можете изменить принятый тип следующим образом:
function f([first, second]: number[]){
// Keep destructuring ^, ^ but change the accepted type.
console.log(first);
console.log(second);
}
Затем любой изпредыдущие 6 примеров будут работать, так как [number, <number...>]
также являются number[]
массивами.