在打字稿函数中传播数组:错误 TS2556
Spreading an array in a typescript function: Error 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 args = [0, 1, 2] as const;
或按照错误提示将 args 定义为元组:
const args: [number, number, number] = [0, 1, 2];
这是为了保证 args
中元素的数量/类型始终与函数参数的要求相匹配。
参数不是那样工作的,这就是你应该如何处理它们的参数
function multiply(n, ...m) {
return m.map((x) => n * x);
}
// 'a' gets value [10, 20, 30, 40]
const a = multiply(10, 1, 2, 3, 4);
遇到 A spread argument must either have a tuple type or be passed to a rest parameter.
的人,您可能需要检查您的 devDependencies 中是否安装了 typescript-parser
。
我正尝试在这样的打字稿函数调用中使用展开运算符:
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 args = [0, 1, 2] as const;
或按照错误提示将 args 定义为元组:
const args: [number, number, number] = [0, 1, 2];
这是为了保证 args
中元素的数量/类型始终与函数参数的要求相匹配。
参数不是那样工作的,这就是你应该如何处理它们的参数
function multiply(n, ...m) {
return m.map((x) => n * x);
}
// 'a' gets value [10, 20, 30, 40]
const a = multiply(10, 1, 2, 3, 4);
遇到 A spread argument must either have a tuple type or be passed to a rest parameter.
的人,您可能需要检查您的 devDependencies 中是否安装了 typescript-parser
。