Conditional types with generics let you choose a type based on a condition. This helps make your code flexible and safe.
When you want a function or type to return different types depending on input types.
When you want to create reusable components that adapt their types automatically.
When you want to enforce rules on types based on other types in your code.
Syntax
Typescript
type MyType<T> = T extends Condition ? TrueType : FalseType;
The T extends Condition checks if T fits the condition.
If yes, it uses TrueType, otherwise FalseType.
Examples
This type returns "Yes" if T is a string, otherwise "No".
Typescript
type IsString<T> = T extends string ? "Yes" : "No";
This extracts the type inside an array. If T is an array, it returns the element type; otherwise, it returns T itself.
Typescript
type ElementType<T> = T extends (infer U)[] ? U : T;
Sample Program
This program defines a conditional type IsNumber that checks if a type is number. It then tests it with number and string types and prints the results.
Typescript
type IsNumber<T> = T extends number ? "Number" : "Not Number";
// Test with numberconst test1: IsNumber<number> = "Number";
// Test with stringconst test2: IsNumber<string> = "Not Number";
console.log(test1);
console.log(test2);
OutputSuccess
Important Notes
Conditional types work at compile time to help TypeScript understand your code better.
You can combine conditional types with generics to create very flexible and reusable types.
Summary
Conditional types choose one type or another based on a condition.
Generics let you write flexible code that works with many types.
Together, they help create smart, adaptable type definitions.
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
Step 1: Understand conditional types
Conditional types choose between two types depending on a condition.
Step 2: Understand generics
Generics allow types to be flexible and work with many types.
Final Answer:
It selects one type or another based on a condition using generic types. -> Option B
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
Step 1: Identify correct conditional type syntax
Conditional types use the syntax: type Name<T> = T extends Condition ? TrueType : FalseType;
Step 2: Check each option
type Result<T> = T extends string ? number : boolean; matches the correct syntax. Others use function, let, or class incorrectly.
Final Answer:
type Result<T> = T extends string ? number : boolean; -> Option A
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
Step 1: Check the condition for T = string
The condition is T extends number. Since string does not extend number, the condition is false.
Step 2: Determine the resulting type
Because the condition is false, the type after the colon is chosen, which is string.
Final Answer:
string -> Option D
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
Step 1: Analyze the conditional type syntax
The syntax requires a type after 'extends' to check the condition.
Step 2: Identify the missing part
Here, 'T extends ?' is missing the type to compare with, causing a syntax error.
Final Answer:
Missing type after 'extends' keyword -> Option C
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
Step 1: Understand conditional type with union
When conditional types receive a union, they distribute over each member separately.
Step 2: Apply condition to each union member
string[] extends any[]? Yes, so 'array'. number extends any[]? No, so 'not array'.
Step 3: Combine results
The result is the union of both: 'array' | 'not array'.
Final Answer:
'array' | 'not array' -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.