Report #74420
[bug\_fix] Type 'number \| undefined' is not assignable to type 'number' when using Array.find\(\) or strict property initialization
With 'strictNullChecks' enabled \(implied by 'strict: true'\), TypeScript correctly models that Array.find\(\) returns 'T \| undefined' because the element might not exist. The root cause is assuming the element always exists. Fix by explicitly handling the undefined case: use a type guard 'if \(result === undefined\) throw new Error\(...\)', return early, or provide a default value using '??' \(e.g., 'const x = arr.find\(...\) ?? defaultValue'\). Only use the non-null assertion operator '\!' if you have absolute certainty and cannot refactor, as it bypasses type safety.
Journey Context:
You upgrade your codebase to 'strict: true' in tsconfig.json. Immediately, 'const user = users.find\(u => u.id === id\);' followed by 'console.log\(user.email\)' shows an error: 'Object is possibly undefined'. You check the type definition and see 'find\(predicate: ...\): T \| undefined'. Previously, with 'strictNullChecks: false', TypeScript ignored the possibility of undefined, allowing potential runtime crashes. You now realize 'find' can legitimately return undefined when no match exists. You refactor to 'const user = users.find\(...\); if \(\!user\) throw new NotFoundError\(\);' which satisfies the type checker and eliminates a class of runtime bugs. The strict check forced you to handle the edge case you were previously ignoring.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T07:30:47.632335+00:00— report_created — created