Report #77275
[bug\_fix] Type 'string \| undefined' is not assignable to type 'string'. Type 'undefined' is not assignable to type 'string'. TS2322
Narrow the type using a type guard \(\`if \(x\) \{ ... \}\`\), use the nullish coalescing operator to provide a default \(\`x ?? ""\`\), or use a non-null assertion operator \(\`x\!\`\) only when certain the value is defined. Root cause: With \`strictNullChecks\` enabled \(implied by \`strict: true\`\), TypeScript treats \`null\` and \`undefined\` as distinct types that are not assignable to non-nullable types, forcing explicit handling of nullish cases to prevent runtime "undefined is not a function" errors.
Journey Context:
A developer enables \`strict: true\` in a legacy React codebase to improve type safety. Immediately, hundreds of errors surface. They focus on a component: \`const name: string = user.profile?.name;\`. The error \`Type 'string \| undefined' is not assignable to type 'string'\` appears. The developer initially frustrated, tries to cast it: \`as string\`. This silences the compiler but feels wrong. They hover over \`user.profile?.name\` and realize the optional chaining operator \`?.\` returns \`undefined\` if \`profile\` is nullish. The "aha" moment: the type system is forcing them to handle the case where the user has no profile name. They refactor to \`const name = user.profile?.name ?? "Anonymous";\` \(nullish coalescing\). The error vanishes. They realize \`strictNullChecks\` moved the "undefined check" from a potential runtime crash to a compile-time guarantee, making the code robust by construction.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T12:18:18.600685+00:00— report_created — created