Bird
Raised Fist0
Typescriptprogramming~20 mins

TypeScript Strict Mode and Why It Matters - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
TypeScript Strict Mode Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output when strict mode is enabled?
Consider this TypeScript code with strict mode enabled. What will be the output when compiled and run?
Typescript
function greet(name: string) {
  return `Hello, ${name.toUpperCase()}`;
}

console.log(greet(undefined as any));
ATypeError at runtime: Cannot read property 'toUpperCase' of undefined
BHello, UNDEFINED
CCompilation error: Argument of type 'undefined' is not assignable to parameter of type 'string'.
DHello, undefined
Attempts:
2 left
💡 Hint
'any' bypasses type checks, even in strict mode.
🧠 Conceptual
intermediate
1:30remaining
Why does strictNullChecks matter in TypeScript strict mode?
Which statement best explains the role of the strictNullChecks option in TypeScript strict mode?
AIt automatically converts null and undefined to empty strings.
BIt allows null and undefined to be assigned to any type without errors.
CIt disables all type checking related to null and undefined.
DIt requires explicit handling of null and undefined values, preventing accidental runtime errors.
Attempts:
2 left
💡 Hint
Think about how strictNullChecks changes how null and undefined are treated in types.
🔧 Debug
advanced
2:00remaining
Identify the error caused by strict mode
What error will this TypeScript code produce when strict mode is enabled?
Typescript
let data: { id: number; name?: string } = { id: 1 };

console.log(data.name.length);
ARuntime error: Cannot read property 'length' of undefined.
BCompilation error: Object is possibly 'undefined'.
CNo error, outputs undefined.
DCompilation error: Property 'length' does not exist on type 'string | undefined'.
Attempts:
2 left
💡 Hint
Check how optional properties are treated in strict mode.
📝 Syntax
advanced
1:30remaining
Which code snippet correctly uses strict mode with non-null assertion?
Given strict mode is enabled, which option correctly accesses a possibly undefined variable without error?
Typescript
let user: { email?: string } = {};
// Access user.email length safely
Aconsole.log(user.email!.length);
Bconsole.log(user.email.length);
Cconsole.log(user.email?.length);
Dconsole.log(user.email.length!);
Attempts:
2 left
💡 Hint
Non-null assertion operator tells TypeScript the value is not null or undefined.
🚀 Application
expert
2:30remaining
How many errors will strict mode report in this code?
Count the number of TypeScript compilation errors when strict mode is enabled for this code:
Typescript
function process(input: string | null) {
  console.log(input.toUpperCase());
  let count: number = null;
  let value: any = 5;
  let result: number = value;
}
A1 error
B3 errors
C2 errors
DNo errors
Attempts:
2 left
💡 Hint
Check each line for type mismatches or unsafe operations under strict mode.

Practice

(1/5)
1. What is the main purpose of enabling strict mode in TypeScript?
easy
A. To allow JavaScript code to run without any type checking
B. To make TypeScript run faster by skipping type checks
C. To make TypeScript check your code more carefully and catch errors early
D. To disable all compiler warnings and errors

Solution

  1. Step 1: Understand what strict mode does

    Strict mode in TypeScript enables more thorough type checking to find mistakes early.
  2. Step 2: Compare options with strict mode purpose

    Only To make TypeScript check your code more carefully and catch errors early correctly describes strict mode as making TypeScript check code carefully and catch errors early.
  3. Final Answer:

    To make TypeScript check your code more carefully and catch errors early -> Option C
  4. Quick Check:

    Strict mode = careful checks [OK]
Hint: Strict mode means more checks, fewer bugs [OK]
Common Mistakes:
  • Thinking strict mode disables checks
  • Confusing strict mode with performance settings
  • Believing strict mode allows ignoring types
2. Which setting in tsconfig.json enables strict mode in TypeScript?
easy
A. "strictCheck": true
B. "strict": true
C. "enableStrict": true
D. "typeCheck": true

Solution

  1. Step 1: Identify the correct tsconfig.json key for strict mode

    The official key to enable strict mode is "strict" set to true.
  2. Step 2: Eliminate incorrect options

    Options A, B, and C are not valid TypeScript compiler options for strict mode.
  3. Final Answer:

    "strict": true -> Option B
  4. Quick Check:

    Strict mode key = "strict" [OK]
Hint: Look for "strict": true in tsconfig.json [OK]
Common Mistakes:
  • Using incorrect keys like "strictCheck"
  • Confusing strict mode with other compiler options
  • Forgetting to put the key inside tsconfig.json
3. What will happen if you run this TypeScript code with strict mode enabled?
let name: string;
console.log(name.length);
medium
A. It will cause a compile-time error because 'name' is used before being assigned
B. It will print the length of the string
C. It will print 'undefined'
D. It will run without errors and print 0

Solution

  1. Step 1: Understand variable initialization in strict mode

    With strict mode, TypeScript requires variables to be initialized before use.
  2. Step 2: Analyze the code behavior

    The variable 'name' is declared but not assigned a value before accessing 'name.length', causing a compile-time error.
  3. Final Answer:

    It will cause a compile-time error because 'name' is used before being assigned -> Option A
  4. Quick Check:

    Uninitialized variable use = error [OK]
Hint: Uninitialized variables cause errors in strict mode [OK]
Common Mistakes:
  • Assuming variables default to empty string
  • Thinking code runs without errors
  • Confusing runtime errors with compile-time errors
4. Identify the error in this TypeScript code when strict mode is enabled and fix it:
function greet(name: string | undefined) {
  console.log(name.toUpperCase());
}
medium
A. Error: 'name' might be undefined; fix by checking if 'name' exists before calling toUpperCase()
B. Error: 'toUpperCase' is not a function; fix by casting 'name' to string
C. No error, code is correct
D. Error: Missing return type; fix by adding ': void' to function

Solution

  1. Step 1: Understand strict null checks

    With strict mode, TypeScript requires checking if a variable that can be undefined is actually defined before using it.
  2. Step 2: Identify the error and fix

    Calling 'toUpperCase()' on 'name' without checking if it's undefined causes an error. Fix by adding a check like 'if (name)'.
  3. Final Answer:

    Error: 'name' might be undefined; fix by checking if 'name' exists before calling toUpperCase() -> Option A
  4. Quick Check:

    Check undefined before method call [OK]
Hint: Check for undefined before using variable methods [OK]
Common Mistakes:
  • Ignoring possible undefined values
  • Trying to cast without checks
  • Assuming no error without strict mode
5. You have this TypeScript code with strict mode enabled:
interface User {
  id: number;
  name?: string;
}

function printUserName(user: User) {
  console.log(user.name.toUpperCase());
}

How can you fix the code to avoid errors and safely print the user's name in uppercase if it exists?
hard
A. Assign a default value: console.log((user.name || '').toUpperCase());
B. Remove the question mark from 'name' in interface to make it required
C. Use a non-null assertion: console.log(user.name!.toUpperCase());
D. Add a check: if (user.name) console.log(user.name.toUpperCase());

Solution

  1. Step 1: Understand optional properties and strict mode

    The 'name' property is optional, so it can be undefined. Strict mode requires checking before use.
  2. Step 2: Evaluate options to safely access 'name'

    Add a check: if (user.name) console.log(user.name.toUpperCase()); safely checks if 'name' exists before calling 'toUpperCase()', avoiding errors. Options B, C, and D have drawbacks or risks.
  3. Final Answer:

    Add a check: if (user.name) console.log(user.name.toUpperCase()); -> Option D
  4. Quick Check:

    Check optional before use = safe code [OK]
Hint: Check optional properties before use in strict mode [OK]
Common Mistakes:
  • Using non-null assertion without guarantee
  • Assuming optional properties are always defined
  • Removing optional marker without reason
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