我尝试在一个类型脚本函数调用中使用spread运算符,如下所示:
function foo(x: number, y: number, z: number) {
console.log(x + y + z);
}
const args = [0, 1, 2];
foo(...args);
但是在编译时,我得到了错误:“spread参数必须具有元组类型或传递给rest参数”(TS2556)。我做错了什么?
增编:当我的参数是动态数组时,我该如何处理这个问题呢?
const args = new Array(3).map(() => Math.random());
5条答案
按热度按时间nlejzf6q1#
编辑动态生成的
args
:选项一:如果你确信
args
总是3元素元组,那么使用类型Assert。选项二,定义
foo
接受rest参数:预定义
args
的旧答案您可以将argsAssert为const:
Playground
或者按照错误提示将args定义为tuple:
Playground
这是为了保证
args
中元素的数量/类型始终与函数参数所需的相匹配。vd2z7a6w2#
你可以使用const assertion来解决这个问题,因为函数
foo
需要3个参数:sulc1iza3#
参数不是这样工作的,这就是你应该如何处理它们
dsf9zpds4#
对于动态推断的参数大小,
as const
方法不起作用。另一个解决方案是在
.apply()
调用中使用...args
产生的数组,Typescript不会对此进行抱怨:mqxuamgl5#
无论是谁遇到
A spread argument must either have a tuple type or be passed to a rest parameter.
,您都可能需要检查typescript-parser
是否安装在devDependencies中。