Bird
Raised Fist0
Typescriptprogramming~5 mins

Distributive conditional types in Typescript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What are distributive conditional types in TypeScript?
Distributive conditional types automatically apply a conditional type to each member of a union type separately, then combine the results back into a union.
Click to reveal answer
beginner
How does TypeScript distribute conditional types over unions?
If a conditional type checks a generic type that is a union, TypeScript applies the condition to each union member individually, then unions the results.
Click to reveal answer
beginner
Given
type Example<T> = T extends string ? "yes" : "no";
What is Example<string | number>?
"yes" | "no" because the conditional type is applied separately to string and number and results are combined.
Click to reveal answer
intermediate
How can you prevent distributive behavior in conditional types?
Wrap the generic type in a tuple like [T] extends [U] ? X : Y to stop distribution over unions.
Click to reveal answer
intermediate
Why are distributive conditional types useful?
They let you write flexible types that automatically handle each union member, making type transformations easier and more powerful.
Click to reveal answer
What happens when a conditional type is applied to a union type in TypeScript?
AThe conditional type is applied to each union member separately.
BThe conditional type is ignored.
CThe conditional type applies only to the first union member.
DThe conditional type applies only if the union has one member.
How do you stop a conditional type from distributing over a union?
AUse the 'unknown' type.
BUse the 'never' type.
CUse the 'any' type.
DWrap the type in a tuple like [T].
What is the result of type R = (string | number) extends string ? true : false;?
Afalse
Btrue
Cstring | number
Dnever
Given type T<T> = T extends number ? 'num' : 'not num';, what is T?
A'not num'
B'num'
C'num' | 'not num'
Dstring | number
Which of these is a key feature of distributive conditional types?
AThey convert types to strings.
BThey automatically apply conditions to each union member.
CThey only work with arrays.
DThey prevent type inference.
Explain what distributive conditional types are and how they work with union types in TypeScript.
Think about how a condition checks each part of a union separately.
You got /4 concepts.
    Describe a method to prevent a conditional type from distributing over a union type and why you might want to do that.
    Consider how wrapping changes the type shape.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does a distributive conditional type do in TypeScript?
      T extends U ? X : Y when T is a union type?
      easy
      A. Applies the condition separately to each member of the union type
      B. Applies the condition once to the entire union type as a whole
      C. Always returns the true branch X regardless of T
      D. Always returns the false branch Y regardless of T

      Solution

      1. Step 1: Understand conditional types with unions

        When T is a union, TypeScript distributes the condition over each member separately.
      2. Step 2: Apply distributive behavior

        Each member of T is checked against U individually, returning X or Y per member.
      3. Final Answer:

        Applies the condition separately to each member of the union type -> Option A
      4. Quick Check:

        Distributive conditional types = separate checks per union member [OK]
      Hint: Remember: conditional types split unions into parts [OK]
      Common Mistakes:
      • Thinking the condition applies once to the whole union
      • Assuming it always returns true or false branch
      • Confusing distributive with non-distributive conditional types
      2. Which of the following is the correct syntax for a distributive conditional type in TypeScript?
      easy
      A. type Result<T> = if (T extends string) number else boolean;
      B. type Result<T> = T => string ? number : boolean;
      C. type Result<T> = T ? number : boolean;
      D. type Result<T> = T extends string ? number : boolean;

      Solution

      1. Step 1: Recall correct conditional type syntax

        Conditional types use T extends U ? X : Y syntax in TypeScript.
      2. Step 2: Match syntax with options

        type Result<T> = T extends string ? number : boolean; matches the correct syntax; others use invalid or incorrect syntax.
      3. Final Answer:

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

        Conditional types use extends ? : syntax [OK]
      Hint: Look for extends ? : pattern in type definitions [OK]
      Common Mistakes:
      • Using if-else instead of conditional operator
      • Missing the extends keyword
      • Using arrow functions incorrectly in type definitions
      3. Given the type:
      type FilterString<T> = T extends string ? T : never;
      type Result = FilterString<'a' | 1 | 'b' | true>;

      What is the type of Result?
      medium
      A. never
      B. 'a' | 1 | 'b' | true
      C. 'a' | 'b'
      D. string

      Solution

      1. Step 1: Apply distributive conditional type to each union member

        Each member is checked: 'a' extends string (true), 1 extends string (false), 'b' extends string (true), true extends string (false).
      2. Step 2: Collect true branch results

        Only 'a' and 'b' remain; others become never and are removed from union.
      3. Final Answer:

        'a' | 'b' -> Option C
      4. Quick Check:

        FilterString filters strings only = 'a' | 'b' [OK]
      Hint: Distributive types filter unions by returning never for false cases [OK]
      Common Mistakes:
      • Thinking the whole union is returned unchanged
      • Confusing never with empty string
      • Assuming the result is just string instead of filtered literals
      4. Identify the error in this distributive conditional type:
      type ExtractNumber<T> = [T] extends [number] ? T : never;
      type Result = ExtractNumber<'a' | 1 | 2>;
      medium
      A. The condition is wrapped in a tuple, so distribution does not occur
      B. The syntax is invalid because of missing extends keyword
      C. The type will always return never
      D. The union type is not allowed in conditional types

      Solution

      1. Step 1: Understand tuple wrapping effect

        Wrapping T in a tuple disables distributive behavior in conditional types.
      2. Step 2: Analyze impact on ExtractNumber

        Since distribution is off, the whole union is checked at once, so 'a' | 1 | 2 extends number is false, returning never.
      3. Final Answer:

        The condition is wrapped in a tuple, so distribution does not occur -> Option A
      4. Quick Check:

        Tuple wrapping disables distributive conditional types [OK]
      Hint: Tuple brackets stop distribution in conditional types [OK]
      Common Mistakes:
      • Assuming distribution still happens with tuple wrapping
      • Confusing syntax error with logic error
      • Thinking union types are not allowed in conditional types
      5. How can you create a type that converts a union of types T into a union of their array types using distributive conditional types?
      Choose the correct type definition.
      hard
      A. type ToArray<T> = T extends any[] ? T : never;
      B. type ToArray<T> = T extends any ? T[] : never;
      C. type ToArray<T> = T[];
      D. type ToArray<T> = [T] extends [any] ? T[] : never;

      Solution

      1. Step 1: Understand distributive conditional type for mapping

        Using T extends any ? T[] : never applies the array transformation to each union member separately.
      2. Step 2: Compare options

        type ToArray<T> = T extends any ? T[] : never; correctly distributes and converts each member to an array type. type ToArray<T> = [T] extends [any] ? T[] : never; disables distribution by tuple wrapping. type ToArray<T> = T[]; wraps the whole union as an array, not each member. type ToArray<T> = T extends any[] ? T : never; filters arrays, not converts.
      3. Final Answer:

        type ToArray<T> = T extends any ? T[] : never; -> Option B
      4. Quick Check:

        Distributive conditional types map unions member-wise [OK]
      Hint: Use T extends any ? to distribute over unions [OK]
      Common Mistakes:
      • Wrapping T in tuple disables distribution
      • Using T[] directly converts whole union, not members
      • Confusing filtering with mapping in conditional 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