Report #51191
[bug\_fix] TS2322: Type 'string \| undefined' is not assignable to type 'string'
Implement a type guard to narrow the type from \`string \| undefined\` to \`string\` before assignment, or provide a default value using the nullish coalescing operator \`??\`. Root cause: With \`strictNullChecks\` enabled, TypeScript enforces that \`undefined\` is a distinct type that cannot be implicitly assigned to a non-nullable type, preventing runtime 'undefined' errors.
Journey Context:
Developer is migrating a JavaScript codebase to TypeScript and enables \`strict: true\` in tsconfig.json. They have a function \`getUser\(id: string\): User\` that calls an API helper returning \`User \| undefined\` when the user is not found. The code reads: \`const user = api.getUser\(id\); return user.name;\`. TypeScript immediately flags \`user\` with TS2322: "Type 'User \| undefined' is not assignable to type 'User'". The developer, accustomed to JavaScript's permissive nature, tries to cast the value using \`as User\`, which silences the compiler but doesn't resolve the potential runtime error. They consider disabling \`strictNullChecks\`, but this removes a critical safety net. After reviewing the TypeScript handbook on narrowing, they realize they must explicitly handle the undefined case. They refactor to: \`const user = api.getUser\(id\); if \(\!user\) throw new Error\('User not found'\); return user.name;\`, which narrows the type to \`User\` within the if-block, satisfying the compiler and ensuring runtime safety.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T16:24:49.804823+00:00— report_created — created