MediumPro challengeJavaScriptTypeScript

Null Object Pattern

TypeScriptClean CodeDesign PatternsRefactoring

Defensive null checks scattered throughout code are a smell.

// dirty — null checks everywhere
interface User { name: string; email: string; role: string; }

function solve(user: User | null | undefined) {
  const name = user ? user.name : 'Anonymous';
  const email = user ? user.email : 'no-email@placeholder.com';
  const role = user ? user.role : 'guest';
  return { name, email, role };
}

Refactor using a Null Object: create a GUEST_USER constant that provides safe defaults, then use it when user is falsy.

solve(null){ name: 'Anonymous', email: 'no-email@placeholder.com', role: 'guest' }

Sample tests

Test #1null returns guest defaults
Input: [null]
Output: {"name":"Anonymous","role":"guest","email":"no-email@placeholder.com"}
Test #2undefined returns guest defaults — treat as absent
Input: [null]
Output: {"name":"Anonymous","role":"guest","email":"no-email@placeholder.com"}
Test #3Real user passes through unchanged
Input: [{"name":"Alice","role":"admin","email":"a@b.com"}]
Output: {"name":"Alice","role":"admin","email":"a@b.com"}