[number, number] 是元组类型吗?
Is [number, number] a tuple type?
在下面的代码中,
function f([first, second]: [number, number]){
console.log(first);
console.log(second);
}
var input:number[] = [1,2];
f(input);
number[]
类型变量 (input
) 传递给 f
.
为什么会出现编译错误? 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, 1ts(2345)
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[]
你告诉 typescript 期望 一个包含 2 个数字的数组。这就是为什么它不接受 任何东西 而是一个包含 2 个数字的数组。
您可以像这样更改接受的类型:
function f([first, second]: number[]){
// Keep destructuring ^, ^ but change the accepted type.
console.log(first);
console.log(second);
}
那么,前面 6 个示例中的任何一个都可以工作,因为 [number, <number...>]
也是 number[]
数组。
这与数组无关,而是简单的类型检查。
它给你一个错误,因为类型 number[]
与 [number, number]
.
不同
您可以将 input
类型更改为 [number, number]
,如下所示
var input: [number, number] = [1, 2]
或保持输入不变并执行以下操作
f(input as [number, number])
编辑
f([1,2])
工作正常,因为您明确传递了两个数字。
在下面的代码中,
function f([first, second]: [number, number]){
console.log(first);
console.log(second);
}
var input:number[] = [1,2];
f(input);
number[]
类型变量 (input
) 传递给 f
.
为什么会出现编译错误? 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, 1ts(2345)
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[]
你告诉 typescript 期望 一个包含 2 个数字的数组。这就是为什么它不接受 任何东西 而是一个包含 2 个数字的数组。
您可以像这样更改接受的类型:
function f([first, second]: number[]){
// Keep destructuring ^, ^ but change the accepted type.
console.log(first);
console.log(second);
}
那么,前面 6 个示例中的任何一个都可以工作,因为 [number, <number...>]
也是 number[]
数组。
这与数组无关,而是简单的类型检查。
它给你一个错误,因为类型 number[]
与 [number, number]
.
您可以将 input
类型更改为 [number, number]
,如下所示
var input: [number, number] = [1, 2]
或保持输入不变并执行以下操作
f(input as [number, number])
编辑
f([1,2])
工作正常,因为您明确传递了两个数字。