arrays - [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)
解决方案
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[]
推荐阅读
- python - Mechanize 中的点击和提交有什么区别?
- git - 从我的 git 服务器结帐/克隆多个分支
- function - 在 Common Lisp 中使用构造(非顶层)函数
- python - 如何在 Python 中有效地检查和更改海龟坐标?
- javascript - jQuery - 添加到购物车的预设数组值
- vb.net - 当 Dock 设置为 Fill 时,用 TreeView 填充 SplitContainer
- r - 给定列中的一组数据,我可以创建一个唯一的 ID 变量吗?
- python - 尝试在使用多处理时追加到列表
- mybatis - ResultSetMetaData 使用 MyBatis
- javascript - 包含 where 查询参数时,firestoreConnect 或 Firestore 返回“未定义”