数组解构不能与参数一起工作
问题描述:
我正在学习TypeScript,所以请接受我的道歉问一个愚蠢的问题。数组解构不能与参数一起工作
下面的代码取自official docs,但它不起作用。它看起来像函数需要2个number
s的Tuple
代替Array
,但在另一方面,它应该拆解可根据文档演示阵...
let input = [1, 2];
function f([first, second]: [number, number]) {
console.log(first);
console.log(second);
}
f(input);
错误:
src/main.ts(6,3): error TS2345: Argument of type 'number[]' is not assignable to parameter of type '[number, number]'.
Property '0' is missing in type 'number[]'.
答
看起来这个例子确实是错误或过时的,或者它可能是打字稿编译器中的一个错误。你是对的,[number, number]
是tuple type,并且input
的类型被推断为number[]
,也就是说,数组的长度没有被保存在该类型中,并且你得到错误消息,因为f
需要一个恰好2个元素的数组。
如果调用f
与文字排列,将工作
f([1, 2]); // ok
您还可以,如果你声明参数作为数组它的工作:
let input: number[] = [1, 2];
function f([first, second]: number[]) {
console.log(first);
console.log(second);
}
f(input);
,但它不会被检查数组长度这些调用也会编译:
f([]);
f([1, 2, 3]);
答
@gamliela,要添加一个变量重刑@artem的回应,这是最好的排在首位正确定义的元组类型:
let input:[number,number] = [1, 2];
let [first, second] = input;
这样的TS2345预警:
f(input)
就会消失。
注意,如果您将doc示例按原样复制到操场上,它将显示相同的TS2345警告,除非您在上面添加适当的元组类型定义。