Truthiness narrowing helps TypeScript understand if a value is true or false in simple checks. This lets the program know what type the value really is inside conditions.
Truthiness narrowing in Typescript
if (value) { // code here runs if value is truthy } else { // code here runs if value is falsy }
TypeScript narrows the type inside the if block to exclude null and undefined. For booleans, it also excludes false.
This helps avoid errors by making sure the value is usable inside the block.
name is not null or empty before using it.let name: string | null = "Alice"; if (name) { // name is treated as string here, not null console.log(name.toUpperCase()); }
count is truthy. TypeScript narrows it to number.let count: number | undefined = 5; if (count) { // count is treated as number here, not undefined or zero console.log(count + 1); }
let flag: boolean | null = null; if (flag) { // runs only if flag is true console.log("Flag is true"); } else { console.log("Flag is false or null"); }
This program greets a person by name if given, or says "Hello, guest!" if the name is null.
function greet(name: string | null) { if (name) { console.log(`Hello, ${name.toUpperCase()}!`); } else { console.log("Hello, guest!"); } } greet("Bob"); greet(null);
Falsy values in JavaScript and TypeScript include false, 0, '' (empty string), null, undefined, and NaN.
Truthiness narrowing helps avoid errors by making sure you only use values when they are valid.
Truthiness narrowing lets TypeScript know a value is valid inside if checks.
This helps prevent errors by narrowing types to exclude falsy values.
Use it to safely work with values that might be null, undefined, or empty.
Practice
if statement?Solution
Step 1: Understand what truthiness means
Truthiness means a value is considered true in a boolean context, so it is not null, undefined, 0, empty string, or false.Step 2: Apply truthiness narrowing in TypeScript
Inside anifstatement, TypeScript narrows the type by excluding falsy values, letting you safely use the value without extra checks.Final Answer:
It tells TypeScript the value is not null, undefined, or falsy, so you can use it safely. -> Option CQuick Check:
Truthiness narrowing = safe value use [OK]
- Thinking it converts values to strings
- Believing it skips type checks
- Assuming it improves runtime speed
if statements correctly uses truthiness narrowing?Solution
Step 1: Check each if condition for truthiness narrowing
if (value !== null && value !== undefined) { console.log(value); } explicitly checks for not null and not undefined, which is a common way to narrow truthy values.Step 2: Identify incorrect syntax or logic
if (value == false) { console.log(value); } checks if value is false (falsy), which is opposite of truthiness narrowing. if (value = true) { console.log(value); } uses assignment (=) instead of comparison (===). if (value === 0) { console.log(value); } checks if value equals 0, which is falsy, so it does not narrow to truthy.Final Answer:
if (value !== null && value !== undefined) { console.log(value); } -> Option DQuick Check:
Correct syntax and logic = if (value !== null && value !== undefined) { console.log(value); } [OK]
- Using assignment (=) instead of comparison (===)
- Checking for falsy instead of truthy
- Confusing equality operators
function printLength(str?: string) {
if (str) {
console.log(str.length);
} else {
console.log('No string');
}
}
printLength('hello');
printLength('');
printLength();Solution
Step 1: Analyze the if condition with truthiness narrowing
The conditionif (str)is true only if str is truthy. An empty string ('') is falsy, so it goes to else.Step 2: Check each function call output
printLength('hello') prints 5 because 'hello' is truthy and length is 5.
printLength('') prints 'No string' because '' is falsy.
printLength() prints 'No string' because str is undefined (falsy).Final Answer:
5, No string, No string -> Option AQuick Check:
Falsy empty string triggers else [OK]
- Assuming empty string is truthy
- Expecting undefined to print length
- Confusing falsy values with null only
function process(value: string | null) {
if (value !== null) {
console.log(value.toUpperCase());
} else {
console.log('No value');
}
}
process(null);
process(undefined);Solution
Step 1: Check the type of value and condition
Value can be string or null, but the function is called with undefined, which is not handled.Step 2: Identify missing check for undefined
The if condition only excludes null, so if value is undefined, it will cause an error when calling toUpperCase.Final Answer:
The if condition should check for undefined as well as null. -> Option AQuick Check:
Check all falsy types to avoid errors [OK]
- Ignoring undefined values
- Assuming null check covers undefined
- Not testing all input cases
input to avoid errors when accessing input.length?function handleInput(input: string | null | undefined | number) {
if (/* condition here */) {
console.log(input.length);
} else {
console.log('Invalid input');
}
}Solution
Step 1: Identify all possible types of input
Input can be string, null, undefined, or number. Only strings have a length property.Step 2: Narrow input to string and check truthiness
Usingtypeof input === 'string'ensures input is a string type. Adding&& inputexcludes empty strings (falsy) if needed.Final Answer:
if (typeof input === 'string' && input) { console.log(input.length); } -> Option BQuick Check:
Check type and truthiness for safe property access [OK]
- Only checking truthiness without type
- Ignoring number type causing errors
- Assuming null check covers undefined
Ready to prove it?
Pass the test and this pattern moves unknown
