具有相同参数但返回类型不同的两个函数

时间:2018-11-12 11:38:55

标签: function typescript generics

我有一个函数,其中有两个函数作为参数(fn1fn2)。这些函数应采用任意数量的,类型相同但返回类型不同的参数。

有没有办法确保函数的参数类型相同?

function myFunction(fn1: Function, fn2: (...args: any[]) => string): number {
    return 0;
}

1 个答案:

答案 0 :(得分:4)

您可以使用conditional typestuples in rest parameters从第一个函数中提取参数类型,并根据提取的参数指定第二个函数

type ArgTypes<T> = T extends (...a:infer A) => unknown?A:[]

function myFunction<T extends (...a: unknown[]) => unknown>(fn1: T, fn2: (...a: ArgTypes<T>) => string) :number {
    return 0;
}

myFunction((s: string) => s, (s:string) => s) //ok
myFunction((s: string) => s, (s:number) => s.toString()) //err