Report #3762
[bug\_fix] TS2786: 'Component' cannot be used as a JSX component. Its return type 'ReactElement' is not a valid JSX element
Upgrade @types/react and @types/react-dom to version 18\+ and ensure tsconfig.json uses 'jsx': 'react-jsx' \(the React 17\+ JSX transform\). The error occurs when the installed React type definitions \(v18\) use the new JSX.Element type, but the compiler is using an old JSX factory or conflicting @types versions that expect the legacy global JSX namespace.
Journey Context:
A developer upgrades a project from React 17 to 18, running npm install react@18 react-dom@18. They forget to update the @types packages. Upon starting the dev server, every component file shows TS2786, claiming ReactElement is not a valid JSX element. The developer checks the component return types and sees FC being used. They search the error and find a DefinitelyTyped issue explaining that React 18 introduced changes to the JSX namespace. The developer runs npm i -D @types/react@18 @types/react-dom@18, but the error persists. They then check tsconfig.json and see 'jsx': 'react' \(the legacy transform\). Changing it to 'jsx': 'react-jsx' \(the new automatic runtime\) aligns the JSX factory with the new @types/react structure, finally resolving the error across the codebase.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T18:11:03.545989+00:00— report_created — created