我遇到的情况是,我调用带有某些参数的函数,然后使用另一个函数将其解析。
这是代码的外观。
function getArgs (): [string, number] {
return ['hello world', 22]
}
function callFnWithArgs (callback) {
callback(...getArgs())
}
callFnWithArgs(function (/* typehint here */) {
})
callFnWithArgs
进行回调,然后通过传递一些参数来执行它。getArgs()
的函数给出。那么,有没有办法键入提示,即回调的参数,这是另一个函数的返回值?
答案 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) {
})