Bird
Raised Fist0
Typescriptprogramming~15 mins

Why conditional types are needed in Typescript - See It in Action

Choose your learning style10 modes available
Why conditional types are needed
📖 Scenario: Imagine you are building a simple TypeScript program that handles different types of user inputs. Sometimes the input is a string, and sometimes it is a number. You want your program to respond differently depending on the input type.
🎯 Goal: You will create a conditional type that checks if a type is string or number and returns a different message type accordingly. This will help you understand why conditional types are useful in TypeScript.
📋 What You'll Learn
Create a type alias called InputType that can be either string or number.
Create a conditional type called ResponseType that returns 'You gave a string' if the input is string, and 'You gave a number' if the input is number.
Create a variable called input of type InputType and assign it the value 'hello'.
Create a variable called response of type ResponseType<typeof input>.
Print the value of response.
💡 Why This Matters
🌍 Real World
Conditional types help developers write flexible code that adapts to different data types automatically, reducing bugs and improving code clarity.
💼 Career
Understanding conditional types is important for TypeScript developers working on complex applications where data types can vary and need precise handling.
Progress0 / 4 steps
1
Create the input type
Create a type alias called InputType that can be either string or number.
Typescript
Hint

Use the | symbol to combine types in TypeScript.

2
Create the conditional type
Create a conditional type called ResponseType that takes a generic type T and returns 'You gave a string' if T is string, otherwise returns 'You gave a number'.
Typescript
Hint

Use the syntax T extends string ? X : Y to create a conditional type.

3
Create the input variable
Create a variable called input of type InputType and assign it the value 'hello'.
Typescript
Hint

Use const input: InputType = 'hello'; to create the variable.

4
Create the response variable and print it
Create a variable called response of type ResponseType<typeof input> and assign it the value 'You gave a string'. Then print the value of response using console.log.
Typescript
Hint

Use console.log(response); to print the message.

Practice

(1/5)
1. Why do we need conditional types in TypeScript?
type Result<T> = T extends number ? string : boolean;
easy
A. To create loops in type definitions
B. To declare variables without types
C. To run code only if a condition is true
D. To select a type based on a condition, making code flexible

Solution

  1. Step 1: Understand conditional types purpose

    Conditional types allow choosing one type or another based on a condition, like T extends number ? string : boolean.
  2. Step 2: Match the purpose with options

    To select a type based on a condition, making code flexible correctly describes this as selecting a type based on a condition for flexibility.
  3. Final Answer:

    To select a type based on a condition, making code flexible -> Option D
  4. Quick Check:

    Conditional types choose types conditionally = D [OK]
Hint: Conditional types pick types based on conditions [OK]
Common Mistakes:
  • Confusing conditional types with runtime if statements
  • Thinking conditional types declare variables
  • Believing conditional types create loops
2. Which of the following is the correct syntax for a conditional type in TypeScript?
easy
A. type Check<T> = T extends string ? number : boolean;
B. type Check<T> = if T then string else number;
C. type Check<T> = T ? string : number;
D. type Check<T> = T == string ? number : boolean;

Solution

  1. Step 1: Recall conditional type syntax

    The correct syntax uses extends to check type relations: T extends U ? X : Y.
  2. Step 2: Identify correct option

    type Check<T> = T extends string ? number : boolean; matches this syntax exactly. Options A, B, and D use invalid syntax for types.
  3. Final Answer:

    type Check<T> = T extends string ? number : boolean; -> Option A
  4. Quick Check:

    Conditional type syntax uses extends = C [OK]
Hint: Look for 'extends' keyword in conditional types [OK]
Common Mistakes:
  • Using runtime if/else syntax in types
  • Using == instead of extends
  • Omitting the extends keyword
3. What is the output type of this code?
type Check<T> = T extends string ? number : boolean;
type Result = Check<'hello'>;
medium
A. string
B. number
C. boolean
D. any

Solution

  1. Step 1: Evaluate the conditional type with T = 'hello'

    Since 'hello' is a string, T extends string is true.
  2. Step 2: Determine the resulting type

    Because the condition is true, the type becomes number.
  3. Final Answer:

    number -> Option B
  4. Quick Check:

    'hello' extends string = number [OK]
Hint: Check if type matches condition to pick true branch [OK]
Common Mistakes:
  • Confusing the true and false branches
  • Thinking the output is string literal
  • Assuming any or unknown type
4. Identify the error in this conditional type:
type Check<T> = T extends number ? 'num' : 'not num';
type Result = Check<>;
medium
A. Wrong use of extends keyword
B. Conditional types cannot return string literals
C. Missing type argument in Check<>
D. Result type must be declared with let or const

Solution

  1. Step 1: Check usage of generic type parameter

    The type alias Check requires a type argument, but Check<> is missing it.
  2. Step 2: Confirm other parts are correct

    The extends keyword and string literal return types are valid. Declaring a type does not use let or const.
  3. Final Answer:

    Missing type argument in Check<> -> Option C
  4. Quick Check:

    Generic types need arguments = B [OK]
Hint: Always provide type arguments for generic types [OK]
Common Mistakes:
  • Leaving generic type arguments empty
  • Confusing type aliases with variables
  • Thinking extends is invalid in types
5. Given this conditional type, what is the type of Flattened?
type Flatten<T> = T extends Array ? U : T;
type Flattened = Flatten;
hard
A. number | string
B. number[] | string
C. Array
D. never

Solution

  1. Step 1: Analyze the conditional type with union input

    The input is number[] | string. Conditional types distribute over unions, so it applies separately to number[] and string.
  2. Step 2: Apply Flatten to each part

    For number[], it matches Array<infer U> with U = number, so result is number.
    For string, it does not match array, so result is string.
  3. Step 3: Combine results

    The combined result is number | string.
  4. Final Answer:

    number | string -> Option A
  5. Quick Check:

    Conditional types distribute over unions = A [OK]
Hint: Remember conditional types distribute over union types [OK]
Common Mistakes:
  • Not distributing over union types
  • Returning array instead of element type
  • Confusing infer usage
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard