Reading preferences from localStorage
loadTheme() runs on page load. It works for returning visitors. What happens on someone's first visit?
interface Prefs { theme: "light" | "dark";} export function loadTheme(): Prefs["theme"] { const prefs: Prefs = JSON.parse(localStorage.getItem("prefs")!); return prefs.theme;}Show answer
line 6 · Null / undefined handling
On a first visit getItem returns null. The ! hides that from TypeScript, JSON.parse(null) returns null, and prefs.theme throws a TypeError that breaks page load.
const raw = localStorage.getItem("prefs"); const prefs: Partial<Prefs> = raw ? JSON.parse(raw) : {}; return prefs.theme ?? "dark";Interview follow-up: Also consider corrupted JSON: wrap JSON.parse in try/catch for data you don't control.