Typescript回调参数,使用函数解析

时间:2018-08-24 09:37:42

标签: typescript typescript3.0

我遇到的情况是,我调用带有某些参数的函数,然后使用另一个函数将其解析。

这是代码的外观。

function getArgs (): [string, number] {
  return ['hello world', 22]
}

function callFnWithArgs (callback) {
  callback(...getArgs())
}

callFnWithArgs(function (/* typehint here */) {
})
  1. 函数callFnWithArgs进行回调,然后通过传递一些参数来执行它。
  2. 这些参数由另一个名为getArgs()的函数给出。

那么,有没有办法键入提示,即回调的参数,这是另一个函数的返回值?

3 个答案:

答案 0 :(得分:1)

您可以定义callback的类型:

function callFnWithArgs (callback: (a: string, b: number) => void) {
  callback(...getArgs())
}

或者,如果可以选择从函数callFnWithArgs外部传递参数,则可以使用通用rest参数

function getArgs (): [string, number] {
  return ['hello world', 22]
}

function callFnWithArgs<T extends any[]>(args: T, callback: (...args: T) => void) {
  callback(...args);
}

callFnWithArgs(getArgs(), (str, nr) => {
})

另一种方法是使用参数的泛型类型创建重载:

function getArgs(): [string, number] {
  return ['hello world', 22]
}
function callFnWithArgs<T>(callback: (a: T) => void);
function callFnWithArgs<T1, T2>(callback: (a: T1, b: T2) => void);
function callFnWithArgs(callback: (...args: any[]) => void) {
  callback(...getArgs());
}

callFnWithArgs<string, number>((str, nr) => {
})

答案 1 :(得分:1)

在TypeScript 3.0或更高版本中,您可以使用标准库中的ReturnType类型别名来确定getArgs的返回类型,然后使用rest参数将其绑定到{{ 1}}:

callFnWithArgs

答案 2 :(得分:0)

它能解决您的任务吗?

function getArgs(): [string, number] {
  return ['hello world', 22]
}

function callFnWithArgs (callback: (a: string, b: number) => void) {
  const [a, b] = getArgs();
  callback(a, b);
}

callFnWithArgs(function (a: string, b: number) {
})