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