定义一个 TypeScript 函数,该函数将接受一个可以有多个签名的函数的参数?

乌鸦赫斯特

寻找一种在 TypeScript 中定义函数的方法,该函数将接受可能具有不同签名的函数作为其参数之一

const foo = (a: string, b: number) => {
  //do something
}

const bar = (a: number, b: string, c: boolean) => {
  //do something
}

const myDynamicFunction = (
  str: string,
  // I tried this, but no dice
  method: ((a: string, b: number) => void) | ((a: number, b: string, c: boolean) => void), 
  num: number,
  bool?: boolean
) => {
  if (bool) {
    method(num, str, bool)
  } else {
    method(str, num)
  }
}

myDynamicFunction(
  'string', foo, 5
)

myDynamicFunction(
  'string', bar, 5, true
)

我尝试进入“函数重载”兔子洞,但这只是让我从我开始的地方开始,基本上与意外数量的参数相同的错误。

阿让

我认为您必须强制转换您的方法,因为 TypeScript 无法解决这个问题:

if (bool) {
    (method as (a: number, b: string, c: boolean) => void)(num, str, bool)
  } else {
    (method as (a: number, b: string) => void)(num, str)
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以将构造函数用作TypeScript中另一个函数的参数类型?

Typescript返回一个函数,该函数返回具有类型约束的组件

是否有一个TypeScript`Partial <any>`类型的函数参数接受`any`但为`void`?

TypeScript允许一个函数作为React prop与函数签名的参数冲突吗?

将函数导入另一个文件后,TypeScript 更改函数的类型定义

如何编写一个TypeScript函数来接受将接口实现为参数的类?

使TypeScript中需要一个函数参数

Typescript从函数中删除第一个参数

Typescript:获取函数类型的最后一个参数的类型

Typescript如何删除函数类型的最后一个参数?

Typescript函数定义,以确保第二个参数与第一个参数的类型相同

定义一个名为articleStats()的函数,该函数带有一个名为fileName的字符串参数

Javascript 函数,它接受一个函数或任何要由该函数求值的参数

Typescript 成员函数返回另一个函数

Typescript - 将函数及其参数传递给另一个函数并强制执行参数的数量和类型

具有不同的第一个参数的Typescript函数重载

如何将函数传递给模板化函数A,该函数可能基于A的另一个参数而具有不同的签名?

定义一个函数,使其可以接受列表或向量

带一个或一组对象的Typescript函数

如何定义一个不能在 TypeScript 中返回任何内容的函数

定义一个名为food的函数,该函数接收两个参数

如何声明一个将接受带有参数但不带参数的函数的函数?

从javascript / typescript中的另一个函数访问函数的参数

我可以限制一个函数在TypeScript中是纯函数吗?

定义一个 Typescript 接口,其中一个属性是一个现有对象的属性

TypeScript:如何正确键入一个接受承诺并按原样返回该承诺的函数

编写一个函数,该函数将指向任何函数的指针作为参数

我可以将一个函数传递给另一个函数,该函数调用具有依赖性的函数吗?

开玩笑-模拟一个函数,该函数又定义了一个方法