#2•Medium

Get Return Type

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.

Challenge Instructions: Get Return Type

Medium

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).

ChallengeSolution
// 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>>>,
 

Pro Challenge

Get access to all 200+ challenges, including every medium, hard, and extreme one.

One-time payment, lifetime access. 30-day money-back guarantee.

Video Walkthrough

Detailed Explanation

To extract the return type from a function, we use conditional types with infer:

type MyReturnType<T> = T extends (...args: never) => infer ReturnType
  ? ReturnType
  : never

How it works:

This challenge helps you understand conditional types with infer and how to apply this concept in real-world scenarios.

This challenge is originally from here.

Share this challenge

Related Challenges

Learn the Concepts

Become a TypeScript Pro

Track your progress through 200+ hands-on challenges. Free, sign in with GitHub.

Or start solving right away: explore all TypeScript challenges