Bird
Raised Fist0
Typescriptprogramming~20 mins

Conditional type with generics in Typescript - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Conditional Type Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of conditional type with string generic
What is the output of the following TypeScript code when TestType<'hello'> is used?
Typescript
type TestType<T> = T extends string ? 'string type' : 'other type';

const result: TestType<'hello'> = 'string type';
console.log(result);
A"other type"
B"string type"
CType error: Type 'string' is not assignable to 'other type'
Dundefined
Attempts:
2 left
💡 Hint
Check if the generic type extends string or not.
❓ Predict Output
intermediate
2:00remaining
Conditional type with union generic
What is the type of Result in the code below?
Typescript
type Conditional<T> = T extends number ? 'number' : 'not number';
type Result = Conditional<string | number>;

// What is Result?
A"number" | "not number"
B"number"
C"not number"
Dstring | number
Attempts:
2 left
💡 Hint
Conditional types distribute over unions.
🔧 Debug
advanced
2:00remaining
Why does this conditional type cause an error?
Identify the error in this TypeScript code and what error it produces.
Typescript
type Check<T> = T extends { id: number } ? T : never;

const obj: Check<{ name: string }> = { name: 'Alice' };
AType error: Type '{ name: string; }' is not assignable to type 'never'.
BSyntax error: Missing semicolon.
CNo error, code compiles fine.
DRuntime error: Property 'id' is undefined.
Attempts:
2 left
💡 Hint
Check what happens when the generic type does not extend the condition.
📝 Syntax
advanced
2:00remaining
Which option correctly defines a conditional generic type?
Choose the option that correctly defines a conditional type with generics to check if T is assignable to string.
Atype IsString<T> = T ? string : false;
Btype IsString<T> = if T extends string then true else false;
Ctype IsString<T> = T extends string ? 'yes';
Dtype IsString<T> = T extends string ? true : false;
Attempts:
2 left
💡 Hint
Look for correct TypeScript conditional type syntax.
🚀 Application
expert
3:00remaining
What is the output of this complex conditional generic type?
Given the code below, what is the type of Result?
Typescript
type Flatten<T> = T extends Array<infer U> ? U : T;

type Result = Flatten<string[] | number>;
Anever
Bstring[] | number
Cstring | number
Dstring
Attempts:
2 left
💡 Hint
Remember conditional types distribute over unions and infer extracts the array element type.

Practice

(1/5)
1. What does a conditional type with generics in TypeScript do?
easy
A. It creates a new variable with a fixed type.
B. It selects one type or another based on a condition using generic types.
C. It runs a function only if a condition is true.
D. It converts all types to strings.

Solution

  1. Step 1: Understand conditional types

    Conditional types choose between two types depending on a condition.
  2. Step 2: Understand generics

    Generics allow types to be flexible and work with many types.
  3. Final Answer:

    It selects one type or another based on a condition using generic types. -> Option B
  4. Quick Check:

    Conditional type with generics = Selects type based on condition [OK]
Hint: Remember: conditional types pick types, generics make them flexible [OK]
Common Mistakes:
  • Thinking conditional types run code instead of selecting types
  • Confusing generics with fixed types
  • Assuming conditional types convert values
2. Which of the following is the correct syntax for a conditional type with generics in TypeScript?
easy
A. type Result<T> = T extends string ? number : boolean;
B. function Result<T> = T ? number : boolean;
C. let Result<T> = T extends string ? number : boolean;
D. class Result<T> = T extends string ? number : boolean;

Solution

  1. Step 1: Identify correct conditional type syntax

    Conditional types use the syntax: type Name<T> = T extends Condition ? TrueType : FalseType;
  2. Step 2: Check each option

    type Result<T> = T extends string ? number : boolean; matches the correct syntax. Others use function, let, or class incorrectly.
  3. Final Answer:

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

    Correct conditional type syntax = type Result<T> = T extends string ? number : boolean; [OK]
Hint: Conditional types use 'type' keyword with generic and '? :' [OK]
Common Mistakes:
  • Using function or class instead of type
  • Missing the 'extends' keyword
  • Using let instead of type
3. What is the type of Result<string> given this code?
type Result<T> = T extends number ? boolean : string;
medium
A. boolean
B. never
C. number
D. string

Solution

  1. Step 1: Check the condition for T = string

    The condition is T extends number. Since string does not extend number, the condition is false.
  2. Step 2: Determine the resulting type

    Because the condition is false, the type after the colon is chosen, which is string.
  3. Final Answer:

    string -> Option D
  4. Quick Check:

    string extends number? No, so type = string [OK]
Hint: Check if generic type matches condition; else pick false type [OK]
Common Mistakes:
  • Assuming string extends number
  • Choosing the true type instead of false
  • Confusing extends with assignment
4. Identify the error in this conditional type with generics:
type Check<T> = T extends ? string : number;
medium
A. Incorrect use of generic parameter
B. Missing colon ':' after condition
C. Missing type after 'extends' keyword
D. Using 'type' instead of 'interface'

Solution

  1. Step 1: Analyze the conditional type syntax

    The syntax requires a type after 'extends' to check the condition.
  2. Step 2: Identify the missing part

    Here, 'T extends ?' is missing the type to compare with, causing a syntax error.
  3. Final Answer:

    Missing type after 'extends' keyword -> Option C
  4. Quick Check:

    Conditional type needs a type after 'extends' [OK]
Hint: Always put a type after 'extends' in conditional types [OK]
Common Mistakes:
  • Leaving out the type after 'extends'
  • Confusing '?' placement
  • Using interface instead of type for conditional types
5. Given this code, what is the type of Output?
type IsArray<T> = T extends any[] ? 'array' : 'not array';
type Output = IsArray<string[] | number>;
hard
A. 'array' | 'not array'
B. 'array'
C. 'not array'
D. string[] | number

Solution

  1. Step 1: Understand conditional type with union

    When conditional types receive a union, they distribute over each member separately.
  2. Step 2: Apply condition to each union member

    string[] extends any[]? Yes, so 'array'. number extends any[]? No, so 'not array'.
  3. Step 3: Combine results

    The result is the union of both: 'array' | 'not array'.
  4. Final Answer:

    'array' | 'not array' -> Option A
  5. Quick Check:

    Conditional distributes over union = 'array' | 'not array' [OK]
Hint: Conditional types distribute over unions automatically [OK]
Common Mistakes:
  • Assuming single result for union input
  • Forgetting distribution over union types
  • Confusing output with input types
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