📖 Scenario: Imagine you are building a simple app that stores user preferences. Sometimes, the preferences might be missing or set to null or undefined. You want to make sure you only work with preferences that have real values.
🎯 Goal: Learn how to use the NonNullable type in TypeScript to remove null and undefined from a type, so you can safely use values without extra checks.
📋 What You'll Learn
Create a variable with a type that includes string, null, and undefined
Create a new type using NonNullable to exclude null and undefined
Create a variable using the new NonNullable type
Print the original and filtered variables to see the difference
💡 Why This Matters
🌍 Real World
In real apps, user data or settings might be missing or not set. Using <code>NonNullable</code> helps avoid errors by ensuring you only work with real values.
💼 Career
Understanding TypeScript utility types like <code>NonNullable</code> is important for writing safe and clean code in professional web development.
Progress0 / 4 steps
1
Create a variable with a union type including null and undefined
Create a variable called userPreference with the type string | null | undefined and assign it the value null.
Typescript
Hint
Use let userPreference: string | null | undefined = null; to create the variable.
2
Create a NonNullable type to exclude null and undefined
Create a new type called SafePreference using NonNullable applied to typeof userPreference.
Typescript
Hint
Use type SafePreference = NonNullable; to create the new type.
3
Create a variable using the NonNullable type
Create a variable called confirmedPreference of type SafePreference and assign it the string value 'dark mode'.
Typescript
Hint
Assign a string value to confirmedPreference with the type SafePreference.
4
Print the original and NonNullable variables
Write two console.log statements to print userPreference and confirmedPreference.
Typescript
Hint
Use console.log(userPreference); and console.log(confirmedPreference); to show the values.
Practice
(1/5)
1.
What does the NonNullable type do in TypeScript?
easy
A. Converts a type to a string
B. Adds null and undefined to a type
C. Removes null and undefined from a type
D. Makes a type optional
Solution
Step 1: Understand the purpose of NonNullable
The NonNullable type removes null and undefined from a given type, ensuring the value is always defined.
Step 2: Compare options with definition
Only Removes null and undefined from a type correctly describes this behavior; others describe different or incorrect behaviors.
Final Answer:
Removes null and undefined from a type -> Option C
Quick Check:
NonNullable removes null and undefined [OK]
Hint: Remember: NonNullable cuts out null and undefined [OK]
Common Mistakes:
Thinking it adds null or undefined
Confusing it with making types optional
Assuming it converts types to strings
2.
Which of the following is the correct syntax to use NonNullable on a type T?
easy
A. NonNullable(T)
B. NonNullable{T}
C. NonNullable[T]
D. NonNullable<T>
Solution
Step 1: Recall TypeScript generic syntax
TypeScript uses angle brackets <> to apply generic types, like NonNullable<T>.
Step 2: Match options with correct syntax
NonNullable<T> uses the correct generic syntax. Options A, C, and D use incorrect brackets or parentheses.
Final Answer:
NonNullable<T> -> Option D
Quick Check:
Generic types use <> brackets [OK]
Hint: Use angle brackets for generics: NonNullable<T> [OK]
Step 2: Apply NonNullable to remove null and undefined
Using NonNullable<MaybeString> removes null and undefined, leaving only string.
Final Answer:
string -> Option A
Quick Check:
NonNullable removes null and undefined, leaving string [OK]
Hint: NonNullable removes null and undefined from union types [OK]
Common Mistakes:
Thinking the type still includes null or undefined
Confusing NonNullable with Partial or Required
Assuming the type becomes never
4.
Identify the error in this code snippet:
type User = { name: string | null };
type CleanUser = NonNullable<User>;
medium
A. There is no error; code is correct
B. The syntax for NonNullable is incorrect
C. NonNullable removes null from properties inside objects automatically
D. NonNullable cannot be applied to object types directly
Solution
Step 1: Understand what NonNullable does
NonNullable removes null and undefined from a type itself, not from nested properties.
Step 2: Analyze the code
The code is syntactically correct. NonNullable<User> results in the same type as User since User is not a union including null or undefined at the top level.
Final Answer:
There is no error; code is correct -> Option A
Quick Check:
Code compiles without errors [OK]
Hint: NonNullable can be applied to object types but does not clean nested properties [OK]
Thinking NonNullable cannot be applied to object types
5.
Given this type, how can you create a new type NonNullUser where the email property cannot be null or undefined using NonNullable?
type User = {
id: number;
email: string | null | undefined;
};
hard
A. type NonNullUser = NonNullable<User>
B. type NonNullUser = { id: number; email: NonNullable<string | null | undefined> }
C. type NonNullUser = { id: number; email: string }
D. type NonNullUser = { id: number; email: string | null }
Solution
Step 1: Understand the goal
We want to keep id as is, but make email exclude null and undefined.
Step 2: Apply NonNullable to the email property only
Using NonNullable<string | null | undefined> on email removes null and undefined, leaving just string.
Step 3: Check other options
type NonNullUser = NonNullable<User> removes null/undefined from the whole User type, which does not affect nested properties. type NonNullUser = { id: number; email: string } changes the type but does not use NonNullable. type NonNullUser = { id: number; email: string | null } still allows null.
Final Answer:
type NonNullUser = { id: number; email: NonNullable<string | null | undefined> } -> Option B
Quick Check:
Apply NonNullable only to the property needing it [OK]
Hint: Use NonNullable on specific properties, not whole object [OK]
Common Mistakes:
Applying NonNullable to the whole object type
Not removing null and undefined from email
Changing type without NonNullable
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.