Report #102960
[bug\_fix] Type 'string \| undefined' is not assignable to type 'string' in a Vite/React component reading process.env.VITE\_API\_URL
Enable strictNullChecks in tsconfig.json \(or accept it as intended\) and guard the value before use: const apiUrl = import.meta.env.VITE\_API\_URL; if \(\!apiUrl\) throw new Error\('VITE\_API\_URL is required'\);. Do not use the non-null assertion \(\!\) unless you have verified the env var is injected at build time; otherwise the runtime error is silently deferred.
Journey Context:
A developer scaffolded a Vite project with the React template, copied over some Create-React-App code that used process.env.REACT\_APP\_API\_URL, and switched it to import.meta.env.VITE\_API\_URL. The editor immediately underlined the variable with TS2322/TS2532 depending on usage. They first tried import.meta.env.VITE\_API\_URL\! because a Stack Overflow answer said it would 'shut TypeScript up.' That compiled, but on the staging build the variable was missing and the app crashed in production with a confusing undefined error. They then looked at the generated .d.ts for vite/client and saw import.meta.env is typed as ImportMetaEnv with \[key: string\]: string \| undefined, which is why the type is optional. They added an explicit if-check, threw a clear error at startup, and re-enabled strictNullChecks. The app now fails fast during initialization instead of halfway through a fetch call.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-10T04:46:44.954111+00:00— report_created — created