Bird
Raised Fist0
Typescriptprogramming~20 mins

Strict null checks and safety in Typescript - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Null Safety Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output with strict null checks enabled
What is the output of this TypeScript code when strict null checks are enabled?
Typescript
function greet(name: string | null) {
  if (name === null) {
    return "Hello, guest!";
  }
  return `Hello, ${name.toUpperCase()}!`;
}

console.log(greet(null));
console.log(greet("alice"));
ATypeError at runtime
BHello, null!\nHello, ALICE!
CHello, guest!\nHello, alice!
DHello, guest!\nHello, ALICE!
Attempts:
2 left
💡 Hint
Check how the function handles the null case before calling toUpperCase.
❓ Predict Output
intermediate
1:30remaining
Value of variable after null assertion
What is the value of variable 'length' after running this code with strict null checks enabled?
Typescript
let maybeString: string | null = "hello";
let length = maybeString!.length;
A5
Bundefined
CTypeError at runtime
DCompilation error
Attempts:
2 left
💡 Hint
The exclamation mark tells TypeScript the value is not null here.
❓ Predict Output
advanced
2:00remaining
Output of function with optional chaining and strict null checks
What is the output of this TypeScript code with strict null checks enabled?
Typescript
type User = { name: string; address?: { city: string } };

function getCity(user: User): string {
  return user.address?.city ?? "Unknown city";
}

console.log(getCity({ name: "Bob", address: { city: "Paris" } }));
console.log(getCity({ name: "Alice" }));
ATypeError at runtime
BParis\nundefined
CParis\nUnknown city
DCompilation error
Attempts:
2 left
💡 Hint
Optional chaining safely accesses nested properties that might be missing.
❓ Predict Output
advanced
1:30remaining
Result of filtering null values with strict null checks
What is the output of this TypeScript code with strict null checks enabled?
Typescript
const values: (string | null)[] = ["a", null, "b", null, "c"];
const filtered = values.filter(v => v !== null);
console.log(filtered);
A[null, null]
B["a", "b", "c"]
C["a", null, "b", null, "c"]
DCompilation error due to type mismatch
Attempts:
2 left
💡 Hint
The filter removes all null values from the array.
🧠 Conceptual
expert
2:30remaining
Why does this code cause a compilation error with strict null checks?
Consider this TypeScript code with strict null checks enabled: let input: string | null = null; let length: number = input.length; Why does this cause a compilation error?
ABecause input might be null, and accessing length on null is unsafe
BBecause length is not a valid property of string
CBecause null is not allowed as a value for string type
DBecause TypeScript does not allow variables to be assigned before declaration
Attempts:
2 left
💡 Hint
Think about what happens if input is null when accessing a property.

Practice

(1/5)
1.

What does enabling strictNullChecks in TypeScript do?

easy
A. It allows assigning null to any type without errors.
B. It automatically converts all null values to empty strings.
C. It disables type checking for null and undefined.
D. It forces you to explicitly handle null and undefined values.

Solution

  1. Step 1: Understand strictNullChecks purpose

    Enabling strictNullChecks makes TypeScript require explicit handling of null and undefined values to avoid runtime errors.
  2. Step 2: Analyze options

    Only It forces you to explicitly handle null and undefined values. correctly describes this behavior. Options B, C, and D are incorrect because they describe behaviors that strictNullChecks does not do.
  3. Final Answer:

    It forces you to explicitly handle null and undefined values. -> Option D
  4. Quick Check:

    strictNullChecks = explicit null handling [OK]
Hint: Remember: strictNullChecks means no silent nulls [OK]
Common Mistakes:
  • Thinking nulls are automatically converted
  • Assuming null checks are disabled
  • Believing null can be assigned anywhere
2.

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;
easy
A. if (value !== null && value !== undefined) { console.log(value.length); }
B. if (value) { console.log(value.length); }
C. console.log(value.length);
D. if (value == null) { console.log(value.length); }

Solution

  1. Step 1: Understand null and undefined checks

    With strictNullChecks, you must check both null and undefined explicitly before accessing properties.
  2. Step 2: Evaluate each option

    if (value !== null && value !== undefined) { console.log(value.length); } correctly checks both null and undefined. if (value) { console.log(value.length); } may fail if value is 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.
  3. Final Answer:

    if (value !== null && value !== undefined) { console.log(value.length); } -> Option A
  4. Quick Check:

    Check both null and undefined explicitly [OK]
Hint: Use !== null && !== undefined to be safe [OK]
Common Mistakes:
  • Using only if(value) which fails on empty strings
  • Accessing properties without checks
  • Using == null but then accessing inside that block
3.

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"));
medium
A. "Hello, null!" and "Hello, ALICE!"
B. "Hello, guest!" and "Hello, ALICE!"
C. Compilation error due to missing null check
D. Runtime error on null input

Solution

  1. Step 1: Analyze null check in function

    The function checks if name === null and returns "Hello, guest!" in that case, so it safely handles null.
  2. Step 2: Check outputs for calls

    Calling greet(null) returns "Hello, guest!". Calling greet("alice") returns "Hello, ALICE!" because toUpperCase() is called on a string.
  3. Final Answer:

    "Hello, guest!" and "Hello, ALICE!" -> Option B
  4. Quick Check:

    Null check prevents errors, outputs as expected [OK]
Hint: Check null before using string methods [OK]
Common Mistakes:
  • Expecting runtime error on null
  • Thinking compilation error occurs
  • Ignoring null check and causing error
4.

Identify the error in this TypeScript code with strictNullChecks enabled and suggest a fix:

function printLength(text: string | null) {
  console.log(text.length);
}
medium
A. Error: Object is possibly 'null'. Fix: Add a null check before accessing length.
B. Error: Missing return type. Fix: Add : void to function.
C. Error: text should be string only. Fix: Remove null from type.
D. No error. Code is correct.

Solution

  1. Step 1: Identify the error

    Accessing text.length without checking if text is null causes a compile error under strictNullChecks.
  2. Step 2: Suggest fix

    Add a check like if (text !== null) before accessing length to ensure safety.
  3. Final Answer:

    Error: Object is possibly 'null'. Fix: Add a null check before accessing length. -> Option A
  4. Quick Check:

    Always check null before property access [OK]
Hint: Add null checks before property access [OK]
Common Mistakes:
  • Ignoring null check and expecting no error
  • Changing type instead of fixing code
  • Thinking return type causes error
5.

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();
}
hard
A. Use non-null assertion: return name!.toUpperCase();
B. Change parameter type to string only and remove null and undefined.
C. Add a check: if (name == null) return "Unknown"; before calling toUpperCase().
D. Remove strictNullChecks from tsconfig.

Solution

  1. Step 1: Identify unsafe code

    Calling toUpperCase() on name without checking for null or undefined causes errors with strictNullChecks.
  2. Step 2: Evaluate options for safety

    Add a check: if (name == null) return "Unknown"; before calling toUpperCase(). adds a check for both null and undefined (using == null) and returns a default string, safely avoiding errors. Change parameter type to string only 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. Remove strictNullChecks from tsconfig. disables safety feature, not recommended.
  3. Final Answer:

    Add a check: if (name == null) return "Unknown"; before calling toUpperCase(). -> Option C
  4. Quick Check:

    Check null/undefined before method calls [OK]
Hint: Use if(name == null) to check null and undefined together [OK]
Common Mistakes:
  • Using non-null assertion unsafely
  • Removing null from type instead of checking
  • Disabling strictNullChecks instead of fixing code
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard