In the below code,
function f([first, second]: [number, number]){
console.log(first);
console.log(second);
}
var input:number[] = [1,2];
f(input);
number[]
type variable(input
) is passed to f
.
why compiler considers literal [1,2]
as tuple type but not array type in f([1,2])
?
答案 0 :(得分:3)
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[]
数组。
答案 1 :(得分:0)
它不是关于数组而是简单的类型检查。
它会给您一个错误,因为number[]
类型与[number, number]
不一样。
您可以将input
类型更改为[number, number]
,如下所示
var input: [number, number] = [1, 2]
或按原样保留输入并执行以下操作
f(input as [number, number])
修改强>
f([1,2])
工作得很好,因为你明确地传递了两个数字。