获取函数的返回类型

新手上路,请多包涵

我有以下功能:

 function test(): number {
    return 42;
}

我可以使用 typeof 获取函数的类型:

 type t = typeof test;

在这里, t 将是 () => number

有没有办法获取函数的返回类型?我希望 t 成为 number 而不是 () => number

原文由 rid 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 521
2 个回答

编辑

从 TypeScript 2.8 开始,这可以通过 ReturnType<T> 正式实现。

 type T10 = ReturnType<() => string>;  // string
type T11 = ReturnType<(s: string) => void>;  // void
type T12 = ReturnType<(<T>() => T)>;  // {}
type T13 = ReturnType<(<T extends U, U extends number[]>() => T)>;  // number[]

有关详细信息,请参阅 此对 Microsoft/TypeScript 的拉取请求

打字稿太棒了!


老派黑客

不幸的是,瑞安的答案不再有效。但是我用一个我非常高兴的黑客修改了它。看哪:

 const fnReturnType = (false as true) && fn();

它通过将 --- 转换为 true false 的字面值来工作,以便类型系统认为返回值是函数的类型,但是当你实际运行代码时,它很短 false 上的电路。

原文由 thedayturns 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用内置 ReturnType

 type SomeType = ReturnType<typeof SomeFunc>

ReturnType 扩展为:

 type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

原文由 z0gSh1u 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进