Report #67897
[bug\_fix] Object is possibly 'undefined' when accessing optional properties or array elements after enabling strictNullChecks
With strictNullChecks enabled, TypeScript correctly includes 'undefined' in the type of optional properties \(T \| undefined\) and array access returns \(T \| undefined\). Suppressing with '\!' is unsafe. The correct fix is to use type guards \(if \(obj.prop\) ...\), optional chaining \(obj.prop?.subProp\), nullish coalescing \(obj.prop ?? defaultValue\), or definite assignment assertions only when truly guaranteed by external logic. This ensures runtime safety matches the compile-time guarantee.
Journey Context:
Developer upgrades to strict: true in tsconfig.json to improve code quality. Immediately, hundreds of errors appear, including 'Object is possibly undefined' on a line like 'const name = user.profile.name;' where profile is defined as 'profile?: Profile'. The developer initially tries adding the non-null assertion operator 'user.profile\!.name', which silences the error but feels wrong. They investigate why this suddenly broke, realizing that without strictNullChecks, TypeScript essentially ignored the possibility of undefined values in most type flows. They examine the specific variable: 'user.profile' has type 'Profile \| undefined'. Accessing '.name' on 'undefined' would cause a runtime 'Cannot read property of undefined' error. The developer implements a type guard: 'if \(user.profile\) \{ const name = user.profile.name; \}' and the error resolves while maintaining type safety. They realize the fix isn't a config change but a code pattern change enforced by the stricter compiler setting.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T20:26:55.491550+00:00— report_created — created