Bird
Raised Fist0
Typescriptprogramming~20 mins

Why conditional types are needed in Typescript - Challenge Your Understanding

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Conditional Types Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this conditional type example?
Consider this TypeScript code using conditional types. What is the type of Result?
Typescript
type IsString<T> = T extends string ? "Yes" : "No";
type Result = IsString<number>;
A"No"
Bnumber
C"Yes"
Dstring
Attempts:
2 left
💡 Hint
Think about whether number extends string.
🧠 Conceptual
intermediate
1:30remaining
Why are conditional types useful in TypeScript?
Which of the following best explains why conditional types are needed in TypeScript?
AThey are used only for runtime value checks.
BThey allow types to change based on other types, enabling flexible and reusable type logic.
CThey replace all interfaces and classes in TypeScript.
DThey make TypeScript code run faster.
Attempts:
2 left
💡 Hint
Think about how types can depend on other types.
🔧 Debug
advanced
2:00remaining
What error does this conditional type cause?
Look at this TypeScript code. What error will it produce?
Typescript
type Check<T> = T extends number ? "Number" : "Other";
type Result = Check<T>;
ANo error, Result is "Number"
BNo error, Result is "Other"
CError: 'T' is not defined
DError: Conditional type syntax error
Attempts:
2 left
💡 Hint
Check if the generic type parameter is declared.
❓ Predict Output
advanced
2:30remaining
What is the output type of this nested conditional type?
Given this TypeScript code, what is the type of Final?
Typescript
type Nested<T> = T extends string ? (T extends "hello" ? "Greeting" : "String") : "Not String";
type Final = Nested<"hello">;
A"Greeting"
B"String"
C"Not String"
Dstring
Attempts:
2 left
💡 Hint
Check the inner conditional after the first condition passes.
🚀 Application
expert
3:00remaining
How many keys does this conditional mapped type produce?
Consider this TypeScript code. How many keys does the type Filtered have?
Typescript
type FilterByType<T, U> = {
  [K in keyof T as T[K] extends U ? K : never]: T[K]
};

interface Data {
  id: number;
  name: string;
  active: boolean;
  score: number;
}

type Filtered = FilterByType<Data, number>;
A1
B3
C4
D2
Attempts:
2 left
💡 Hint
Count keys in Data whose type extends number.

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