What if a tiny check could save your whole program from crashing unexpectedly?
Why Strict null checks and safety in Typescript? - Purpose & Use Cases
Imagine you are writing a program that uses many variables, some of which might not have values yet. You try to use these variables without checking if they are empty or missing. This can cause your program to crash unexpectedly.
Manually checking every variable for null or undefined is slow and easy to forget. Missing one check can cause bugs that are hard to find. This makes your code messy and unreliable.
Strict null checks automatically warn you when a variable might be null or undefined. This helps you write safer code by forcing you to handle these cases clearly before using the variables.
let name: string | null = null;
console.log(name.length); // runtime error if name is nulllet name: string | null = null;
if (name !== null && name !== undefined) {
console.log(name.length);
}It enables you to catch potential errors early, making your programs more stable and easier to maintain.
When building a web app, strict null checks prevent crashes caused by missing user data, improving user experience and trust.
Manual null checks are error-prone and tedious.
Strict null checks help catch mistakes before running code.
This leads to safer, cleaner, and more reliable programs.
Practice
What does enabling strictNullChecks in TypeScript do?
Solution
Step 1: Understand strictNullChecks purpose
EnablingstrictNullChecksmakes TypeScript require explicit handling ofnullandundefinedvalues to avoid runtime errors.Step 2: Analyze options
Only It forces you to explicitly handlenullandundefinedvalues. correctly describes this behavior. Options B, C, and D are incorrect because they describe behaviors thatstrictNullChecksdoes not do.Final Answer:
It forces you to explicitly handlenullandundefinedvalues. -> Option DQuick Check:
strictNullChecks = explicit null handling [OK]
- Thinking nulls are automatically converted
- Assuming null checks are disabled
- Believing null can be assigned anywhere
Which of the following is the correct way to check for null or undefined before accessing a variable value in TypeScript with strictNullChecks enabled?
let value: string | null | undefined;
Solution
Step 1: Understand null and undefined checks
WithstrictNullChecks, you must check bothnullandundefinedexplicitly before accessing properties.Step 2: Evaluate each option
if (value !== null && value !== undefined) { console.log(value.length); } correctly checks bothnullandundefined. if (value) { console.log(value.length); } may fail ifvalueis an empty string. console.log(value.length); causes an error. if (value == null) { console.log(value.length); } checks for null but then accesses length inside the if, which is incorrect logic.Final Answer:
if (value !== null && value !== undefined) { console.log(value.length); } -> Option AQuick Check:
Check both null and undefined explicitly [OK]
- Using only if(value) which fails on empty strings
- Accessing properties without checks
- Using == null but then accessing inside that block
What will be the output of the following TypeScript code with strictNullChecks enabled?
function greet(name: string | null) {
if (name === null) {
return "Hello, guest!";
}
return `Hello, ${name.toUpperCase()}!`;
}
console.log(greet(null));
console.log(greet("alice"));Solution
Step 1: Analyze null check in function
The function checks ifname === nulland returns "Hello, guest!" in that case, so it safely handles null.Step 2: Check outputs for calls
Callinggreet(null)returns "Hello, guest!". Callinggreet("alice")returns "Hello, ALICE!" becausetoUpperCase()is called on a string.Final Answer:
"Hello, guest!" and "Hello, ALICE!" -> Option BQuick Check:
Null check prevents errors, outputs as expected [OK]
- Expecting runtime error on null
- Thinking compilation error occurs
- Ignoring null check and causing error
Identify the error in this TypeScript code with strictNullChecks enabled and suggest a fix:
function printLength(text: string | null) {
console.log(text.length);
}Solution
Step 1: Identify the error
Accessingtext.lengthwithout checking iftextisnullcauses a compile error understrictNullChecks.Step 2: Suggest fix
Add a check likeif (text !== null)before accessinglengthto ensure safety.Final Answer:
Error: Object is possibly 'null'. Fix: Add a null check before accessinglength. -> Option AQuick Check:
Always check null before property access [OK]
- Ignoring null check and expecting no error
- Changing type instead of fixing code
- Thinking return type causes error
Given this TypeScript function with strictNullChecks enabled, which modification safely handles undefined and null inputs without errors?
function formatName(name: string | null | undefined) {
return name.toUpperCase();
}Solution
Step 1: Identify unsafe code
CallingtoUpperCase()onnamewithout checking fornullorundefinedcauses errors withstrictNullChecks.Step 2: Evaluate options for safety
Add a check:if (name == null) return "Unknown";before callingtoUpperCase(). adds a check for bothnullandundefined(using== null) and returns a default string, safely avoiding errors. Change parameter type tostringonly and remove null and undefined. removes null safety but is less flexible. Use non-null assertion:return name!.toUpperCase();forces non-null assertion which can cause runtime errors. RemovestrictNullChecksfrom tsconfig. disables safety feature, not recommended.Final Answer:
Add a check:if (name == null) return "Unknown";before callingtoUpperCase(). -> Option CQuick Check:
Check null/undefined before method calls [OK]
- Using non-null assertion unsafely
- Removing null from type instead of checking
- Disabling strictNullChecks instead of fixing code
Ready to prove it?
Pass the test and this pattern moves unknown
