If you find this story engaging and helpful, feel free to like or share it with others who might appreciate it!
I have a backpack that can hold anything I need throughout the day. This backpack is amazing, but there’s a catch: it can only carry items that I have explicitly told it about. If I forget to mention an item or assume it’s in there without checking, I could reach inside and find nothing but empty space when I need it most.
In the world of JavaScript, strict null checks are like that backpack. They ensure that I’m always aware of what I’ve packed and what I haven’t. By enabling strict null checks, I’m making a pact with my backpack to always be clear about what should be inside. If I try to pull out my water bottle, but I forgot to pack it, the backpack will immediately let me know with a gentle reminder rather than leaving me thirsty later on.
This becomes crucial when I’m depending on various items throughout my day—like my phone, keys, or wallet. If I’m not diligent, I might assume I have everything, only to find myself locked out of my house or unable to call a friend. Similarly, in JavaScript, if I assume a variable has a value when it doesn’t, I could run into errors that stop my program in its tracks.
By using strict null checks, I’m encouraged to double-check my backpack’s contents at every step. It makes me more mindful about what I pack and ensures I’m never caught off guard. This way, I can move through my day with confidence, knowing that everything I need is actually there.
If you enjoyed this analogy, liking or sharing it would be awesome! It might just help someone else understand this concept too.
I have a function that fetches my favorite book from the backpack:
function getFavoriteBook(backpack: { favoriteBook?: string }): string {
return backpack.favoriteBook;
}
Without strict null checks, I might assume the book is always packed. But if I reach for it and it’s not there, my program will throw an error, much like reaching into an empty backpack.
By enabling strict null checks in TypeScript, like so:
{
"compilerOptions": {
"strictNullChecks": true
}
}
I am prompted to handle the possibility that my favoriteBook
might be undefined
. This means I need to check if the book is there before trying to read it:
function getFavoriteBook(backpack: { favoriteBook?: string }): string {
if (backpack.favoriteBook) {
return backpack.favoriteBook;
} else {
throw new Error("Favorite book is not in the backpack!");
}
}
With this setup, I’m always reminded to verify the presence of my favorite book before trying to read it, preventing unexpected errors.
Here’s another example with nullish coalescing:
function getFavoriteBookTitle(backpack: { favoriteBook?: string }): string {
return backpack.favoriteBook ?? "No book found";
}
In this case, if the favoriteBook
isn’t there, I’m prepared with a default message, just like having a backup plan if I forget to pack my book.
Key Takeaways:
- Awareness: Enabling strict null checks in TypeScript forces us to be explicit about our assumptions, preventing unexpected runtime errors.
- Safety: Just like checking my backpack before leaving the house, strict null checks ensure that I handle potential
null
orundefined
values gracefully. - Confidence: With strict null checks, I can write more reliable code, knowing that I’ve accounted for all scenarios, much like having confidence that my backpack contains everything I need.