Function Typescript从传递的函数返回类型推断返回类型

Function Typescript从传递的函数返回类型推断返回类型,function,generics,typescript,Function,Generics,Typescript,我可能会试图实现不可能的目标,但事情是这样的 我想定义一个函数(函数a),它将返回与传入函数a参数的新函数相同的类型 e、 g 导出功能测试(arg:function):T{ 返回arg; } 函数a():字符串{ 返回“a”; } 函数b():编号{ 返回0; } 设aVal:string=test(a); 设bVal:编号=试验(b); 显然,这将允许我针对一些编译时错误强烈地键入响应 有人知道我是不是在做梦吗 **注意:为演示而拼凑的代码** 干杯这个怎么样 功能测试(arg:()=>T

我可能会试图实现不可能的目标,但事情是这样的

我想定义一个函数(函数a),它将返回与传入函数a参数的新函数相同的类型

e、 g

导出功能测试(arg:function):T{
返回arg;
}
函数a():字符串{
返回“a”;
}
函数b():编号{
返回0;
}
设aVal:string=test(a);
设bVal:编号=试验(b);
显然,这将允许我针对一些编译时错误强烈地键入响应

有人知道我是不是在做梦吗

**注意:为演示而拼凑的代码**

干杯

这个怎么样

功能测试(arg:()=>T):T{
返回arg();
}
函数a():字符串{
返回“a”;
}
函数b():编号{
返回0;
}
设aVal:string=test(a);
设bVal:编号=试验(b);

我们没有使用函数接口,而是将arg定义为一个不带参数且返回类型为T的函数。然后,实际类型T可以由传入的函数定义。

这太棒了,我不知道您可以在不定义函数本身的情况下定义这样的函数签名。谢谢。。我们定义的是一个函数参数,它应该是一个不接受任何参数并返回某些内容的函数。就这些。:)布里尔正是我需要的
export function test<T> ( arg:Function ):T {
    return arg;
}

function a():string {
    return 'a';
}

function b():number {
    return 0;
}

let aVal:string = test(a);
let bVal:number = test(b);