首页 > 解决方案 > [number, number] 是元组类型吗?

问题描述

在下面的代码中,

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)

标签: arraystypescriptecmascript-6tuplesdestructuring

解决方案


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[]


推荐阅读