📖 Scenario: Imagine you have a list of users, and each user may or may not have a profile with an address. You want to safely get the city name without causing errors if some data is missing.
🎯 Goal: Build a TypeScript program that uses optional chaining to safely access nested properties in user objects.
📋 What You'll Learn
Create an array of user objects with optional nested properties
Add a variable to hold the index of the user to check
Use optional chaining to access the city name safely
Print the city name or 'Unknown' if it does not exist
💡 Why This Matters
🌍 Real World
Optional chaining helps avoid errors when working with data that may be incomplete or missing, such as user profiles or API responses.
💼 Career
Many jobs require handling uncertain data safely in TypeScript, making optional chaining a valuable skill for frontend and backend developers.
Progress0 / 4 steps
1
Create the users array with optional nested properties
Use const users = [ ... ] and include the exact objects with nested properties as shown.
2
Add a variable for the user index
Create a constant called userIndex and set it to 1 to select the second user.
Typescript
Hint
Use const userIndex = 1; to pick the second user in the array.
3
Use optional chaining to get the city name
Create a constant called city and set it to the city name of the user at userIndex using optional chaining: users[userIndex]?.profile?.address?.city.
Typescript
Hint
Use ?. to safely access nested properties without errors if any part is missing.
4
Print the city or 'Unknown' if missing
Write a console.log statement to print the value of city if it exists, or the string 'Unknown' if city is undefined.
Typescript
Hint
Use the nullish coalescing operator ?? to provide a default value when city is undefined.
Practice
(1/5)
1. What does the optional chaining operator ?. do in TypeScript?
easy
A. It forces a property to be non-nullable.
B. It throws an error if the property does not exist.
C. It converts a value to a boolean.
D. It safely accesses a property or method, returning undefined if the value is null or undefined.
Solution
Step 1: Understand optional chaining purpose
Optional chaining ?. allows safe access to nested properties or methods without causing runtime errors if the object is null or undefined.
Step 2: Identify behavior on null or undefined
If the value before ?. is null or undefined, it returns undefined instead of throwing an error.
Final Answer:
It safely accesses a property or method, returning undefined if the value is null or undefined. -> Option D
Quick Check:
Optional chaining = safe access without error [OK]
Hint: Optional chaining returns undefined if value is null or undefined [OK]
Common Mistakes:
Thinking it throws an error on missing property
Confusing it with non-null assertion operator
Assuming it converts values to boolean
2. Which of the following is the correct syntax to safely access the property name of an object user using optional chaining?
easy
A. user?.name()
B. user?.name
C. user?.[name]
D. user?.name?
Solution
Step 1: Review optional chaining syntax for properties
The correct syntax to access a property safely is object?.property.
Step 2: Check each option
user?.name uses user?.name which is correct. user?.[name] uses brackets incorrectly. user?.name() treats name as a method call. user?.name? has invalid syntax.
Final Answer:
user?.name -> Option B
Quick Check:
Property access with ?. = user?.name [OK]
Hint: Use ?. before property name without parentheses for safe access [OK]
Common Mistakes:
Adding parentheses when accessing properties
Using brackets incorrectly with optional chaining
Placing ? after property name
3. Consider the following TypeScript code:
type User = { profile?: { age?: number } };
const user: User = {};
const age = user.profile?.age ?? 30;
console.log(age);
What will be the output?
medium
A. 30
B. null
C. Error at runtime
D. undefined
Solution
Step 1: Analyze optional chaining and nullish coalescing
The expression user.profile?.age safely tries to access age. Since profile is undefined, this returns undefined.
Step 2: Apply nullish coalescing operator
The ?? operator returns the right side value 30 because the left side is undefined.
Final Answer:
30 -> Option A
Quick Check:
undefined ?? 30 = 30 [OK]
Hint: ?. returns undefined if missing; ?? provides default value [OK]
Common Mistakes:
Expecting undefined instead of default value
Confusing ?? with || operator
Assuming runtime error on missing property
4. Identify the error in this TypeScript code snippet:
interface Data {
info?: {
value: number;
};
}
const data: Data = {};
const val = data?.info.value;
medium
A. No error, code works fine
B. Runtime error: accessing property of undefined
C. Type error: missing optional chaining before 'value'
D. Syntax error: optional chaining used incorrectly on data
Solution
Step 1: Check optional chaining usage
The code uses data?.info.value. Optional chaining is applied only on data, but info can be undefined.
Step 2: Identify missing optional chaining
Accessing info.value without optional chaining can cause a runtime error if info is undefined. It should be data.info?.value or data?.info?.value.
Final Answer:
Type error: missing optional chaining before 'value' -> Option C
Quick Check:
Optional chaining needed before 'value' to avoid error [OK]
Hint: Chain ?. for each possibly undefined property [OK]
Common Mistakes:
Applying ?. only once for nested properties
Assuming optional chaining on parent covers all children