TypeScript — TS2532: Object is possibly undefined
Resolve possible-undefined errors with proper guards, optional chaining and a clear decision about missing values.
Symptoms
- error TS2532: Object is possibly 'undefined'
- Accessing a property of a maybe-missing value fails
- Array access returns possibly undefined under noUncheckedIndexedAccess
- Destructuring an optional field warns
Possible causes
- A lookup or find may return undefined and the code dereferences it directly
- Indexed access is typed as possibly undefined under strict settings
- A function parameter is optional and used unconditionally
- A cache or map get returns undefined for missing keys
Diagnosis steps
Add a guard and handle the missing case
const u = users.find(...); if (!u) return; u.nameInterpretation
Guarding before access narrows the type and forces a decision about the missing case.
Use optional chaining where missing is acceptable
user?.profile?.nameInterpretation
Optional chaining propagates undefined instead of throwing, appropriate when absence is a valid outcome.
Check strict settings
grep -n "noUncheckedIndexedAccess\|strict" tsconfig.jsonInterpretation
These flags make more values possibly undefined, which is intentional and improves safety.
Root cause
A value that can legitimately be undefined is used without checking, so the compiler flags the dereference. The fix is a real branch or an explicit assumption, not suppression.
Fix
Guard with a conditional and handle the missing case, use optional chaining and nullish coalescing when absence is acceptable, or validate earlier so the value is guaranteed present.
Verify the fix
Rerun the type checker and confirm the error is gone, and add a test for the missing-value path to confirm it behaves as intended.
Symptom walkthrough
The compiler reports TS2532 for a value that may be undefined. The value typically comes from a lookup such as find or a map get, or from indexed access under noUncheckedIndexedAccess. The warning is a prompt to decide what should happen when the value is missing, and the correct answer is usually a real branch rather than a non-null assertion.
Fix in practice
Handle the missing case explicitly with a guard and an early return or a default. Where absence is normal, use optional chaining and nullish coalescing so the code degrades gracefully. Reserve the non-null assertion for cases where an earlier check truly guarantees presence.
Verification
Rerun the type checker and confirm the error is gone, then add and run a test that exercises the missing-value path. Confirming both the present and absent cases behave correctly validates the fix.
Diagnostic commands
Check the behavior with commands like these:
const u = users.find(...); if (!u) return; u.name
user?.profile?.name
grep -n "noUncheckedIndexedAccess\|strict" tsconfig.json