📖 Scenario: Imagine you are building a simple app that accepts user input. Sometimes the input is a number, and sometimes it is a word. You want to write code that can handle both cases safely.
🎯 Goal: You will create a variable that can hold either a number or a string using union types. Then you will write code to check the type and handle each case properly.
📋 What You'll Learn
Create a variable called userInput that can hold a number or a string
Create a variable called userInput and assign a number to it
Write an if statement that checks if userInput is a string
Print different messages depending on whether userInput is a string or a number
💡 Why This Matters
🌍 Real World
Many apps accept user input that can be different types, like numbers or text. Union types help handle these safely.
💼 Career
Understanding union types is important for writing flexible and error-free TypeScript code in real projects.
Progress0 / 4 steps
1
Create a union type variable
Create a variable called userInput that can hold either a number or a string. Assign the number 42 to it.
Typescript
Hint
Use the | symbol to combine types in TypeScript.
2
Assign a new value to the union type variable
Assign the string "hello" to the variable userInput.
Typescript
Hint
You can assign either a number or a string to userInput.
3
Check the type of the union variable
Write an if statement that checks if userInput is a string using typeof userInput === "string".
Typescript
Hint
Use typeof to check the type inside the if statement.
4
Print the result based on the type
Run the code and observe the output. It should print User input is a string: hello.
Typescript
Hint
Check the console output to see the message.
Practice
(1/5)
1. Why do we need union types in TypeScript? let value: string | number;
easy
A. To make variables immutable
B. To allow a variable to hold more than one type of value
C. To force variables to be only one type
D. To automatically convert types at runtime
Solution
Step 1: Understand union type declaration
The syntax string | number means the variable can hold either a string or a number.
Step 2: Identify the purpose of union types
This flexibility allows one variable to store multiple types safely without errors.
Final Answer:
To allow a variable to hold more than one type of value -> Option B
Quick Check:
Union types = multiple allowed types [OK]
Hint: Union types let variables hold multiple types safely [OK]
Common Mistakes:
Thinking union types make variables immutable
Believing union types force a single type only
Confusing union types with automatic type conversion
2. Which of the following is the correct syntax to declare a variable that can be a string or number in TypeScript?
easy
A. let data: string & number;
B. let data: string or number;
C. let data: string | number;
D. let data: string, number;
Solution
Step 1: Recall union type syntax
Union types use the pipe symbol | to separate types.
Step 2: Compare options
let data: string | number; uses | correctly, while others use invalid syntax.
Final Answer:
let data: string | number; -> Option C
Quick Check:
Union syntax uses | symbol [OK]
Hint: Use | to separate types in union declarations [OK]
Common Mistakes:
Using & instead of | for union types
Separating types with commas
Writing 'or' instead of |
3. What will be the output of this TypeScript code?
function format(value: string | number) {
if (typeof value === 'string') {
return value.toUpperCase();
} else {
return value.toFixed(2);
}
}
console.log(format('hello'));
console.log(format(3.14159));
medium
A. "HELLO" and 3
B. "hello" and "3.14159"
C. Error because value can be string or number
D. "HELLO" and "3.14"
Solution
Step 1: Analyze function behavior for string input
If input is a string, toUpperCase() converts it to uppercase, so 'hello' becomes 'HELLO'.
Step 2: Analyze function behavior for number input
If input is a number, toFixed(2) formats it to 2 decimal places, so 3.14159 becomes '3.14'.
Final Answer:
"HELLO" and "3.14" -> Option D
Quick Check:
String upper + number fixed decimals = output [OK]
Hint: Check type with typeof before calling type-specific methods [OK]
Common Mistakes:
Assuming no type check needed and causing errors
Expecting original number without formatting
Confusing toFixed output as number instead of string
4. Identify the error in this TypeScript code using union types:
function printLength(value: string | number) {
console.log(value.length);
}
printLength('test');
printLength(123);
medium
A. Error because number type has no 'length' property
B. Error because string type has no 'length' property
C. No error, code runs fine
D. Error because union types cannot be used in functions
Solution
Step 1: Understand property access on union types
Accessing length on value is unsafe because numbers don't have a length property.
Step 2: Identify the error cause
TypeScript will raise an error to prevent runtime failure when value is a number.
Final Answer:
Error because number type has no 'length' property -> Option A
Quick Check:
Accessing length on number causes error [OK]
Hint: Check type before accessing properties on union types [OK]
Common Mistakes:
Ignoring type checks and expecting no error
Thinking string has no length property
Believing union types disallow functions
5. You want a function that accepts either a string or an Array<string> and returns the total number of characters. Which is the best way to use union types to achieve this?
hard
A. function countChars(input: string | string[]) {
if (typeof input === 'string') {
return input.length;
} else {
return input.join('').length;
}
}
B. function countChars(input: string & string[]) {
return input.length;
}
C. function countChars(input: string | string[]) {
return input.length;
}
D. function countChars(input: any) {
return input.length;
}
Solution
Step 1: Understand input types and their length
A string has a length property; an array of strings also has length, but we want total characters, so we join the array first.
Step 2: Check union type handling
function countChars(input: string | string[]) {
if (typeof input === 'string') {
return input.length;
} else {
return input.join('').length;
}
} uses a type check to handle string and array separately, joining array elements to count total characters correctly.
Final Answer:
function countChars(input: string | string[]) { if (typeof input === 'string') { return input.length; } else { return input.join('').length; } } -> Option A
Quick Check:
Use type check and join array for total chars [OK]
Hint: Use typeof and array methods to handle union types properly [OK]
Common Mistakes:
Using intersection (&) instead of union (|)
Not checking type before accessing properties
Using any type losing type safety
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.