I have the following function:
function test(): number {
return 42;
}
I can obtain the type of the function by using typeof
:
type t = typeof test;
Here, t
will be () => number
.
Is there a way to obtain the return type of the function? I would like t
to be number
instead of () => number
.
EDIT
As of TypeScript 2.8 this is officially possible with 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[]
See this pull request to Microsoft/TypeScript for details.
TypeScript is awesome!
Old-school hack
Ryan's answer doesn't work anymore, unfortunately. But I have modified it with a hack which I am unreasonably happy about. Behold:
const fnReturnType = (false as true) && fn();
It works by casting false
to the literal value of true
, so that the type system thinks the return value is the type of the function, but when you actually run the code, it short circuits on false
.