Mar*_*.H. 19 typescript spread-syntax
我正在尝试在打字稿函数调用上使用扩展运算符,如下所示:
function foo(x: number, y: number, z: number) {
console.log(x + y + z);
}
const args = [0, 1, 2];
foo(...args);
Run Code Online (Sandbox Code Playgroud)
但在编译时,我收到错误:“扩展参数必须具有元组类型或传递给剩余参数”(TS2556)。我究竟做错了什么?
附录:当我的参数是动态数组时,如何解决这个问题,如
const args = new Array(3).map(() => Math.random());
Run Code Online (Sandbox Code Playgroud)
Psi*_*dom 25
编辑动态生成args:
选项一:如果您确定args始终是 3 元素元组,则使用类型断言。
const args = new Array(3).map(() => Math.random()) as [number, number, number];
Run Code Online (Sandbox Code Playgroud)
选项二,定义foo接受剩余参数:
function foo(...args: number[]) {
console.log(args[0] + args[1] + args[2]);
}
const args = new Array(3).map(() => Math.random());
foo(...args);
Run Code Online (Sandbox Code Playgroud)
预定义的旧答案args
您可以将 args 断言为 const:
const args = [0, 1, 2] as const;
Run Code Online (Sandbox Code Playgroud)
或者按照错误建议将 args 定义为元组:
const args: [number, number, number] = [0, 1, 2];
Run Code Online (Sandbox Code Playgroud)
这是为了保证元素的数量/类型始终args与函数参数的要求相匹配。
您可以使用const 断言来解决该问题。因为该函数foo需要 3 个参数:
function foo(x: number, y: number, z: number) {
console.log(x + y + z);
}
const args = [0, 1, 2] as const;
foo(...args);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21815 次 |
| 最近记录: |