typescript - 在打字稿函数中传播数组:错误 TS2556
问题描述
我正在尝试在这样的打字稿函数调用上使用扩展运算符:
function foo(x: number, y: number, z: number) {
console.log(x + y + z);
}
const args = [0, 1, 2];
foo(...args);
但是在编译时,我收到错误:“扩展参数必须具有元组类型或传递给休息参数”(TS2556)。我究竟做错了什么?
附录:当我的参数是动态数组时,我该如何解决这个问题,如
const args = new Array(3).map(() => Math.random());
解决方案
编辑动态生成args
:
选项一:如果您确定args
始终是 3 个元素的元组,请使用类型断言。
const args = new Array(3).map(() => Math.random()) as [number, number, number];
选项二,定义foo
接受rest参数:
function foo(...args: number[]) {
console.log(args[0] + args[1] + args[2]);
}
const args = new Array(3).map(() => Math.random());
foo(...args);
预定义的旧答案args
您可以将 args 断言为 const:
const args = [0, 1, 2] as const;
或者按照错误提示将 args 定义为元组:
const args: [number, number, number] = [0, 1, 2];
这是为了保证元素的数量/类型args
始终与函数参数的要求相匹配。
推荐阅读
- robotframework - 是否可以在 RobotFramework 中设置关键字参数的范围而不显式使用内置关键字 - “设置
多变的” - android - 如何将带有预训练嵌入的 Tensorflow RNN (LSTM/GRU) 集成到移动设备 (android/iphone) 中?
- html - 菜单项之间的空白框
- excel - 在 Excel 数据透视表中计算与上一个日期的差异
- asp.net - Telerik 皮肤无法正常工作
- android - 如何处理 Volley Request NoTimeout
- python - bar() 缺少 1 个必需的位置参数:'left'
- python - 设置打印汉字的Python编码
- java - 将颜色设置为红色以在 jtextarea 上显示的字符串变量活动
- reactjs - 使用 Rails 布局从其他反应组件渲染反应组件