What if you could tell your program to accept different kinds of data without messy checks everywhere?
Why Union type syntax and behavior in Typescript? - Purpose & Use Cases
Imagine you are writing a program that accepts user input which could be either a number or a string. Without union types, you have to write separate code blocks to handle each type manually, checking and converting types everywhere.
This manual checking is slow and error-prone. You might forget a check, causing bugs or crashes. The code becomes long and hard to read, making it difficult to maintain or update.
Union types let you declare a variable that can hold multiple types in a clean way. The TypeScript compiler helps you by checking your code and guiding you to handle each type properly, reducing errors and making your code simpler.
function process(input: any) {
if (typeof input === 'string') {
// handle string
} else if (typeof input === 'number') {
// handle number
}
}function process(input: string | number) {
if (typeof input === 'string') {
// handle string
} else {
// handle number
}
}It enables writing safer and clearer code that naturally handles multiple types without extra boilerplate.
For example, a function that accepts either a user ID as a number or a username as a string can be typed with a union, making the code easier to understand and less buggy.
Manual type checks are slow and error-prone.
Union types let variables hold multiple types cleanly.
They help write safer, clearer, and easier-to-maintain code.
Practice
Solution
Step 1: Understand union type purpose
A union type lets a variable accept values from multiple specified types, not just one.Step 2: Compare options with definition
Only Hold values of multiple specified types safely correctly describes this behavior; others describe fixed or automatic conversions which union types do not do.Final Answer:
Hold values of multiple specified types safely -> Option AQuick Check:
Union type = multiple types allowed [OK]
- Thinking union types convert values automatically
- Believing union types restrict to one type only
- Confusing union with intersection types
value that can be either a string or a number?Solution
Step 1: Recall union type syntax
Union types use the pipe symbol | between types without parentheses needed.Step 2: Evaluate each option
let value: string | number; uses correct syntax:string | number. let value: string & number; uses & which means intersection, not union. let value: string, number; uses comma which is invalid. let value: string | number[]; uses number[] which is an array of numbers, not a single number.Final Answer:
let value: string | number; -> Option AQuick Check:
Union syntax uses | without commas [OK]
- Using & instead of | for union types
- Separating types with commas
- Using number[] instead of number
function printId(id: string | number) {
if (typeof id === 'string') {
console.log('ID is a string: ' + id.toUpperCase());
} else {
console.log('ID is a number: ' + id.toFixed(2));
}
}
printId(42);Solution
Step 1: Analyze type check and method calls
The function checks ifidis a string or number. For number, it callstoFixed(2)which formats number with 2 decimals.Step 2: Apply input and output
Input is 42 (number), so else branch runs and prints 'ID is a number: 42.00'.Final Answer:
ID is a number: 42.00 -> Option CQuick Check:
Number uses toFixed(2) = 42.00 [OK]
- Calling string methods on numbers without check
- Expecting no decimal places in toFixed output
- Ignoring type narrowing with typeof
function formatInput(input: string | number) {
return input.toUpperCase();
}Solution
Step 1: Check method usage on union type
MethodtoUpperCase()exists on string but not on number.Step 2: Understand type safety with union
Without checking type, callingtoUpperCase()oninputcauses error because input might be number.Final Answer:
Error: toUpperCase() not available on number -> Option BQuick Check:
Call methods only after type check [OK]
- Calling string methods on union without type check
- Assuming union types allow all methods
- Ignoring compiler errors about method availability
type Result = string | null;
function process(value: Result) {
return value?.toUpperCase() ?? 'No value';
}
console.log(process(null));
console.log(process('hello'));Solution
Step 1: Understand optional chaining and nullish coalescing
The expressionvalue?.toUpperCase()callstoUpperCase()only ifvalueis not null or undefined. Otherwise, it returns undefined.Step 2: Apply nullish coalescing fallback
If the left side is undefined,?? 'No value'returns 'No value'. So fornull, output is 'No value'. For 'hello', it returns 'HELLO'.Final Answer:
No value HELLO -> Option DQuick Check:
Optional chaining + ?? handles null safely [OK]
- Expecting error when calling method on null
- Ignoring optional chaining usage
- Confusing null and undefined handling
Ready to prove it?
Pass the test and this pattern moves unknown
