当前位置: 首页 > 知识库问答 >
问题:

TypeScript调用函数与Rest参数从另一个与Rest参数

刘焱
2023-03-14

在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将提供的参数?

共有3个答案

田修为
2023-03-14

是的,它不会编译,因为您正在做错误的事情。以下是正确的方法:

function test1(p1: string, ...p2: string[]) {
    // Do something
}

function test2(p1: string, ...p2: string[]) {
    test1(p1, ...p2);
}
苍德寿
2023-03-14

没有办法将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));
}
包修贤
2023-03-14

试试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”?非常感谢。

  • 我正在用React-Redux设置一个应用程序,并配置了商店,类似于这里显示的指南 这是我的密码: 但是,在运行build时,我一直收到以下Typescript错误 我很困惑。Redux的声明文件状态(如下所示)是否表明StoreEnhancer只是将Store和state扩展名作为空的普通对象接收? 如果是这样,为什么它不接受rest参数中的“Any”类型,即使我在配置文件中将“noImplic

  • 为了自定义,我创建了两个函数,它们具有相同的返回类型和不同的参数,一个是单节点配置,另一个是集群配置。守则如下: 调用它们时,返回值(LettuceConnectionFactory)是另一个函数的参数。守则如下: 但是spring会报告 由于项目稍微复杂一些,所以有很多redis单服务器A、B、C。和集群服务器A、B、C...,它们有不同的ip、端口和池策略。我最初的想法是,通过将RedisCo

  • 主要内容:1. Rest parameter和arguments对象的区别,2.reset parameter和解构,3.动态函数reset parameter在ECMAScript 2015或ES6中引入了参数,从而提高了处理参数的能力。 参数允许将无限数量的参数表示为数组。 通过使用参数,可以使用任意数量的参数调用函数。 在ES6之前,使用了函数的对象。 对象不是类型的实例。 因此,不能直接使用方法。 参数以三个点()为前缀。 尽管参数的语法类似于扩展运算符,但与扩展运算符完全相反。 参数必