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

具有相应回调的Typecript通用Rest运算符

仲孙宇定
2023-03-14

我最近学了打字,因为它看起来很有趣。我以前在C中使用过泛型,并在Typescript中成功地完成了一些泛型操作,但现在我对以下用例感到困惑:

我有一个通用函数,可以接受任意数量的Rest参数。然后将这些参数传递给回调函数,该函数也提供了。但我似乎不知道如何使typescript编译器接受我提供的类型,以隐式传递到回调函数中。

async SampleFunction(
    cb: () => void,
    ...args: any[]
)

以此作为示例用法:

let stringVariable = "lorem";
let numberVariable = 8;

SampleFunction(
    (stringArg, numberArg) => {},
    stringVariable,
    numberVariable,
)

此示例导致参数认为它们隐式类型为“any”。

我的问题是:我如何定义这个函数,这样我就可以传入任何传统的参数,这些参数的类型将以相同的顺序传递到回调函数中。

共有2个答案

宋望
2023-03-14

您可以使用参数

function sampleFunction<T extends (...args: any[]) => any>(
  callback: T,
  ...args: Parameters<T>
) {}

sampleFunction((a: string, b: number) => null, "foo"); // Doesn't pass
sampleFunction((a: string, b: number) => null, "foo", "bar"); // Doesn't pass
sampleFunction((a: string, b: number) => null, "foo", 42); // Passes
sampleFunction((a: string, b: number) => null, 42, "bar"); // Doesn't pass
祁景山
2023-03-14

多亏了@Etheryte的帮助,我进入了正确的搜索轨道。

我找到了我想要的解决方案:

function SampleFunction<T extends any[]>(
    cb: (...args: T) => void,
    ...args: T
): void {}

let stringVariable = 'lorem';
let numberVariable = 8;

SampleFunction(
    (a, b) => {}, 
    stringVariable, 
    numberVariable
);

这会将正确的参数类型从函数隐式传递到回调

 类似资料:
  • 我有几个函数,我根据ajax调用中的列表填充下拉列表: 现在,在下拉列表被填充后,我想选择一个特定的项目,但要获得这个项目,我需要另一个ajax,如: 主要功能基本上是: 问题是,在< code>fillUpdateDropDown完成之前,已经到达了< code>getDefaultDetails的< code>success回调(dropdowns可能有很多项)。 我试图理解回调,但在我的情况

  • 问题内容: Java是强静态转换,因此这意味着“ ===”没有用处 我看了很多文档,但没有看过相同比较运算符。 问题答案: 在弱类型语言(例如Javascript)中非常有用,因为它可以验证被比较的对象是同一类型,并避免隐式转换。 在Java之类的强类型语言中绝对没有用,因为您不能在不编写特定方法的情况下比较不同类型的变量。 例如,如果你想一个比一个的,你将不得不写一些特殊的方法,例如: 但这几乎

  • 目前,我有一个类分数,它允许我用三种不同的方式创建分数 对于一个整数,在这种情况下,给定的整数将是分子,分母将设置为1 有2个整数,分子和分母 最后一种方法是解析一个字符串,该字符串必须与REGEX-?\d/[1-9]\d* gcd将尽可能减少生成的分数。 我现在想实现的是,具有相同分子和分母的分数实例具有相同的引用例如。 应该返回true。 我研究了一些关于泛型和边界的章节,但我不确定这是否是我

  • 问题: 我正在尝试为Wordpress插件注册自定义endpoint。我面临的问题是,当我调用add_action('rest_api_init',回调)时,回调函数没有被调用。在该回调函数中存在“register_rest_route()”方法,而该方法又未被调用,我无法注册任何自定义终结点。 < li >我正在使用docker进行开发 < li >没有抛出任何错误 代码: 问题: 代码到达“v

  • 我有一个短信api在PHP,我打电话发送短信。我通过一些json和一个url回调来获得响应状态,短信被发送。 之后服务器调用我的回调url,但我不能得到响应体。$_GET和$_POST是空的...留档不存在。它应该有一些json。有人能帮帮我吗?提前感谢

  • 问题内容: 我正在尝试创建一个通用类型,该通用类型保留已创建的自身版本的地图以供以后使用。实际上,这是一种单例模式,其中每种类型都有一个实例。到目前为止,我的代码是: 但是,我仍然不确定我是否“做对了”。感觉我应该能够指定该集合为(类-> FieldBinder)。IDE警告有关return语句的事实只会加强这种想法。 有没有更好的方法来解决这个问题? 注意:这个问题似乎密切相关,但是距离足够远,