Report #84415
[bug\_fix] Type 'string \| undefined' is not assignable to type 'string'. Type 'undefined' is not assignable to type 'string'.
Add a runtime guard to narrow the type before assignment, such as \`if \(value === undefined\) throw new Error\('Missing'\)\` or \`if \(\!value\) return\`. Alternatively, if certain the value is defined \(e.g., initialized immediately before\), use the non-null assertion \`value\!\` \(use sparingly\). For optional values, change the target type to accept \`undefined\` or provide a default using \`??\`.
Journey Context:
You enable \`strict: true\` in an existing JavaScript codebase. Suddenly, hundreds of errors appear. One common case: \`const config: Config = JSON.parse\(fs.readFileSync\('config.json'\)\)\`. TypeScript infers \`JSON.parse\` returns \`any\`, but if you explicitly type it or use \`fetch\`, you get \`string \| undefined\`. You try to assign \`const name: string = maybeName\` where \`maybeName\` comes from \`Array.find\(\)\` or an optional chain \`user?.profile?.name\`. TypeScript warns about \`undefined\`. You initially try to silence it by casting \`as string\`, but this is unsafe. You realize you need to handle the edge case. You add \`if \(\!name\) throw new NotFoundError\(\)\` before using it. TypeScript's control flow analysis narrows the type to \`string\` after the check, and the error disappears. You understand that \`strictNullChecks\` moves the null-checks from runtime crashes to compile-time guarantees.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T00:17:01.613127+00:00— report_created — created