在TypeScript中,可以用“Rest参数”声明函数:
function test1(p1: string, ...p2: string[]) {
// Do something
}
假设我声明了另一个调用test1
的函数:
function test2(p1: string, ...p2: string[]) {
test1(p1, p2); // Does not compile
}
编译器产生以下消息:
提供的参数与调用目标的任何签名都不匹配:无法将类型“string”应用于类型为“string[]”的参数2。
如何才能test2
调用test1
将提供的参数?
是的,它不会编译,因为您正在做错误的事情。以下是正确的方法:
function test1(p1: string, ...p2: string[]) {
// Do something
}
function test2(p1: string, ...p2: string[]) {
test1(p1, ...p2);
}
没有办法将p1和p2从test2传递到test1。但是你可以这样做:
function test2(p1: string, ...p2: string[]): void {
test1.apply(this, arguments);
}
这就是利用函数。原型应用和参数对象。
如果您不喜欢arguments对象,或者不希望以完全相同的顺序传递所有参数,可以执行以下操作:
function test2(p1: string, ...p2: string[]) {
test1.apply(this, [p1].concat(p2));
}
试试Spread操作符。它应该考虑到与Jeffery的答案相同的效果,但有更简洁的语法。
function test2(p1: string, ...p2: string[]) {
test1(...arguments);
}
我有一个gradle任务,它调用一个脚本,并使用将命令行参数传递给脚本。 我将此任务称为gradle任务,具有以下任何选项 不过,我想看看我是否将taskAll拆分为多个任务,比如 我明白我将不得不复制taskAll来创建,,并删除其中的if条件和硬代码参数。 然而,我想知道是否有可能通过让只调用可执行文件的MainTask,然后让,,调用,并传递参数,和,来实现一个更简洁的实现。
在 JavaScript 中,很多内建函数都支持传入任意数量的参数。 例如: Math.max(arg1, arg2, ..., argN) —— 返回入参中的最大值。 Object.assign(dest, src1, ..., srcN) —— 依次将属性从 src1..N 复制到 dest。 ……等。 在本章中,我们将学习如何编程实现支持函数可传入任意数量的参数。以及,如何将数组作为参数传递
我需要制作两个lambda函数,一个用参数调用另一个,被调用的函数将参数打印出来。我很难让它工作:第一个函数: 请告知我应该在被调用函数中输入什么代码才能接收参数“hello Jenny”?非常感谢。
为了自定义,我创建了两个函数,它们具有相同的返回类型和不同的参数,一个是单节点配置,另一个是集群配置。守则如下: 调用它们时,返回值(LettuceConnectionFactory)是另一个函数的参数。守则如下: 但是spring会报告 由于项目稍微复杂一些,所以有很多redis单服务器A、B、C。和集群服务器A、B、C...,它们有不同的ip、端口和池策略。我最初的想法是,通过将RedisCo
我正在用React-Redux设置一个应用程序,并配置了商店,类似于这里显示的指南 这是我的密码: 但是,在运行build时,我一直收到以下Typescript错误 我很困惑。Redux的声明文件状态(如下所示)是否表明StoreEnhancer只是将Store和state扩展名作为空的普通对象接收? 如果是这样,为什么它不接受rest参数中的“Any”类型,即使我在配置文件中将“noImplic
主要内容:1. Rest parameter和arguments对象的区别,2.reset parameter和解构,3.动态函数reset parameter在ECMAScript 2015或ES6中引入了参数,从而提高了处理参数的能力。 参数允许将无限数量的参数表示为数组。 通过使用参数,可以使用任意数量的参数调用函数。 在ES6之前,使用了函数的对象。 对象不是类型的实例。 因此,不能直接使用方法。 参数以三个点()为前缀。 尽管参数的语法类似于扩展运算符,但与扩展运算符完全相反。 参数必