📖 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
Step 1: Understand conditional types purpose
Conditional types allow choosing one type or another based on a condition, like T extends number ? string : boolean.
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.
Final Answer:
To select a type based on a condition, making code flexible -> Option D
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
Step 1: Recall conditional type syntax
The correct syntax uses extends to check type relations: T extends U ? X : Y.
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.
Final Answer:
type Check<T> = T extends string ? number : boolean; -> Option A
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
Step 1: Evaluate the conditional type with T = 'hello'
Since 'hello' is a string, T extends string is true.
Step 2: Determine the resulting type
Because the condition is true, the type becomes number.
Final Answer:
number -> Option B
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
Step 1: Check usage of generic type parameter
The type alias Check requires a type argument, but Check<> is missing it.
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.
Final Answer:
Missing type argument in Check<> -> Option C
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
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.
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.
Step 3: Combine results
The combined result is number | string.
Final Answer:
number | string -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.