首页 > 解决方案 > 在打字稿函数中传播数组:错误 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());

标签: typescriptspread-syntax

解决方案


编辑动态生成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始终与函数参数的要求相匹配。


推荐阅读