我有以下功能: function test(): number { return 42; } 我可以使用 typeof 获取函数的类型: type t = typeof test; 在这里, t 将是 () => number 。 有没有办法获取函数的返回类型?我希望 t 成为 number 而不是 () => number 。 原文由 rid 发布,翻译遵循 CC BY-SA 4.0 许可协议
编辑 从 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 许可协议
编辑
从 TypeScript 2.8 开始,这可以通过
ReturnType<T>
正式实现。有关详细信息,请参阅 此对 Microsoft/TypeScript 的拉取请求。
打字稿太棒了!
老派黑客
不幸的是,瑞安的答案不再有效。但是我用一个我非常高兴的黑客修改了它。看哪:
它通过将 --- 转换为
true
false
的字面值来工作,以便类型系统认为返回值是函数的类型,但是当你实际运行代码时,它很短false
上的电路。