Implement the built-in `ReturnType<T>` generic without using it. Learn conditional types with `infer` in this medium-level challenge on TypeScriptPro.
Implement the built-in ReturnType<T> generic without using it.
In this medium-level challenge, you'll implement the built-in returntype<t> generic without using it.. Learn conditional types with infer in this medium-level challenge on TypeScriptPro.
You'll learn about conditional types with infer, essential skills for advanced TypeScript development and type-level programming.
Implement the built-in ReturnType<T> generic without using it.
For example
const fn = (v: boolean) => {
if (v)
return 1
else
return 2
}
type a = MyReturnType<typeof fn> // should be "1 | 2"Change the following code to make the test cases pass (no type check errors).
// Video Solution: https://youtube.com/watch?v=QvIjldsFfOk
/* _____________ Your Code Here _____________ */
type MyReturnType<T> = any
/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '../helpers'
type cases = [
Expect<Equal<string, MyReturnType<() => string>>>,
Expect<Equal<123, MyReturnType<() => 123>>>,
Expect<Equal<ComplexObject, MyReturnType<() => ComplexObject>>>,
Expect<Equal<Promise<boolean>, MyReturnType<() => Promise<boolean>>>>,
Expect<Equal<() => 'foo', MyReturnType<() => () => 'foo'>>>,
Expect<Equal<1 | 2, MyReturnType<typeof fn>>>,
Get access to all 200+ challenges, including every medium, hard, and extreme one.
One-time payment, lifetime access. 30-day money-back guarantee.
To extract the return type from a function, we use conditional types with infer:
type MyReturnType<T> = T extends (...args: never) => infer ReturnType
? ReturnType
: neverHow it works:
never arguments -> Why never?
Because inside a function we have a contravariant position, so we need to use never to match all possible arguments. This is explained in the video walkthrough at 1:20.infer ReturnType to capture the return typeReturnType if it's a function, otherwise neverThis challenge helps you understand conditional types with infer and how to apply this concept in real-world scenarios.
This challenge is originally from here.
Track your progress through 200+ hands-on challenges. Free, sign in with GitHub.
Or start solving right away: explore all TypeScript challenges