Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[lexical-react] Bug Fix: Import JSX type from React to prevent "Cannot find namespace 'JSX'"-error when type-checking with React 19 #7080

Merged
merged 2 commits into from
Jan 24, 2025

Conversation

Svish
Copy link
Contributor

@Svish Svish commented Jan 22, 2025

Description

When using @lexical/react with Typescript and React 19, we get several "Cannot find namespace 'JSX'" errors. As described in the React 19 Upgrade Guide the global JSX namespace has been removed in favor of React.JSX.

Here's some of the errors I get when running type-check on our project after adding @lexical/react:

node_modules/@lexical/react/LexicalComposer.d.ts(23,78): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalContentEditable.d.ts(15,51): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalContentEditable.d.ts(15,66): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalErrorBoundary.d.ts(10,15): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalErrorBoundary.d.ts(13,98): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalRichTextPlugin.d.ts(11,22): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalRichTextPlugin.d.ts(12,52): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalRichTextPlugin.d.ts(12,74): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalRichTextPlugin.d.ts(14,5): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/shared/useDecorators.d.ts(11,15): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/shared/useDecorators.d.ts(15,103): error TS2503: Cannot find namespace 'JSX'.

In this PR I've attempted to replace all cases of JSX.Element with React.JSX.Element under packages/lexical-react.

I have also added import type {React} from 'react';import * as React from 'react'; to the files which didn't already have import * as React from 'react'; in the file. (using import type {React} from 'react'; seems to have triggered "error TS2596: 'React' can only be imported by turning on the 'esModuleInterop' flag and using a default import.", so I just did import * as React from 'react'; instead, which I see have been used other places in the codebase as well)

@facebook-github-bot
Copy link
Contributor

Hi @Svish!

Thank you for your pull request and welcome to our community.

Action Required

In order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you.

Process

In order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA.

Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with CLA signed. The tagging process may take up to 1 hour after signing. Please give it that time before contacting us about it.

If you have received this in error or have any questions, please contact us at [email protected]. Thanks!

Copy link

vercel bot commented Jan 22, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
lexical ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jan 24, 2025 7:41pm
lexical-playground ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jan 24, 2025 7:41pm

Copy link

github-actions bot commented Jan 22, 2025

size-limit report 📦

Path Size
lexical - cjs 29.07 KB (0%)
lexical - esm 28.86 KB (0%)
@lexical/rich-text - cjs 38.04 KB (0%)
@lexical/rich-text - esm 30.92 KB (0%)
@lexical/plain-text - cjs 36.55 KB (0%)
@lexical/plain-text - esm 28.22 KB (0%)
@lexical/react - cjs 39.85 KB (0%)
@lexical/react - esm 32.28 KB (0%)

@etrepum
Copy link
Collaborator

etrepum commented Jan 22, 2025

import type {React} from 'react' is not the same thing which is why you're getting the error. Can you start by providing an example project that reproduces this issue? The examples in the lexical repo do not have this issue building with React 19. There's no way for us to know if these changes fix anything without a way to reproduce the problem.

@Svish
Copy link
Contributor Author

Svish commented Jan 22, 2025

Are the examples written with Typescript, and does it type check with lib/node_modules included?

I will try to setup a sample repo. Can't share the one where I ran into this, as it's proprietary.

For what it's worth, I've ran into this same issue with several other projects too (for example react-datepicker), and after they have fixed their types to be React 19 compatibility, then the issue going away.

@etrepum
Copy link
Collaborator

etrepum commented Jan 22, 2025

Yes they are typescript, I don't know all of the settings off the top of my head, but a reproduction is needed to evaluate the fix and prevent future regressions either way.

…'" error when type-checking with React 19
@Svish
Copy link
Contributor Author

Svish commented Jan 24, 2025

Ok, I've found a simple way to reproduce it:

  1. Take the example examples/react-rich from this repo
  2. Remove "skipLibCheck": true form the tsconfig.json files
  3. Then run the following commands:
npm i
npm i react@19 @types/react@19 react-dom@19 @types/react-dom@19 @vitejs/plugin-react@latest typescript@latest vite@5
npx tsc --noEmit

That should give the same errors that I'm getting (and are hopefully gone after this fix):

node_modules/@lexical/react/LexicalComposer.d.ts(23,78): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalContentEditable.d.ts(15,51): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalContentEditable.d.ts(15,66): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalErrorBoundary.d.ts(10,15): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalErrorBoundary.d.ts(13,98): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalRichTextPlugin.d.ts(11,22): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalRichTextPlugin.d.ts(12,52): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalRichTextPlugin.d.ts(12,74): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalRichTextPlugin.d.ts(14,5): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/LexicalTreeView.d.ts(37,5): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/shared/useDecorators.d.ts(11,15): error TS2503: Cannot find namespace 'JSX'.
node_modules/@lexical/react/shared/useDecorators.d.ts(15,103): error TS2503: Cannot find namespace 'JSX'.
src/plugins/TreeViewPlugin.tsx(12,43): error TS2503: Cannot find namespace 'JSX'.

@Svish
Copy link
Contributor Author

Svish commented Jan 24, 2025

I also changed the PR to add import type {JSX} from 'react'; instead of changing JSX.Element to React.JSX.Element and did so across the whole project rather than just for packages/lexical-react.

@etrepum
Copy link
Collaborator

etrepum commented Jan 24, 2025

This PR is failing integrity checks, it looks like the prettier autofixes haven't been run

@etrepum
Copy link
Collaborator

etrepum commented Jan 24, 2025

npm run prettier:fix should sort this out, then do another commit and push

@Svish
Copy link
Contributor Author

Svish commented Jan 24, 2025

It was eslint! Thought I had pasted in the JSX import correctly enough, but this project apparently has an import sort order plugin. Running npm run lint -- --fix has hopefully solved it 👍

I did try to run npm run prettier:fix first, but that resulted in a change in every single file in the whole repo, so ... not sure what's up with that ... 😬

@Svish Svish changed the title [lexical-react] Bug Fix: Cannot find namespace 'JSX' [lexical-react] Bug Fix: Import JSX type from React to prevent "Cannot find namespace 'JSX'"-error when type-checking with React 19 Jan 24, 2025
Copy link
Collaborator

@etrepum etrepum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, thanks! I've added a follow-up issue #7093 to prevent future regressions.

@etrepum etrepum added this pull request to the merge queue Jan 24, 2025
Merged via the queue into facebook:main with commit 6a98a47 Jan 24, 2025
39 checks passed
GermanJablo added a commit to GermanJablo/lexical that referenced this pull request Jan 30, 2025
commit a62a1a6
Author: James Fitzsimmons <[email protected]>
Date:   Thu Jan 30 19:13:35 2025 +1100

    [lexical-mark] Feature: include inline decorator nodes in marks (facebook#7086)

commit 881c7fe
Author: Bob Ippolito <[email protected]>
Date:   Thu Jan 30 00:13:00 2025 -0800

    [lexical-utils] Fix: Modify $reverseDfs to be a right-to-left variant of $dfs (facebook#7112)

commit ce2bb45
Author: Nigel Gutzmann <[email protected]>
Date:   Wed Jan 29 14:41:12 2025 -0800

    [lexical-utils] Feature: add reverse dfs iterator (facebook#7107)

commit 3a140d2
Author: mohammed shaheer kp <[email protected]>
Date:   Tue Jan 28 06:19:45 2025 +0530

    [lexical-playground] Bug Fix: Ensure Delete Node handles all node types (facebook#7096)

    Co-authored-by: shaheerkpzaigo <[email protected]>

commit 8e2ede2
Author: Adam Pugh <[email protected]>
Date:   Mon Jan 27 18:49:38 2025 -0600

    Listeners Lexical: 3 updates to spelling and grammar - Update listeners.md  (facebook#7100)

commit 9fcc494
Author: Adam Pugh <[email protected]>
Date:   Mon Jan 27 18:49:34 2025 -0600

    Lexical Docs: 2 updates to spelling README.md (facebook#7102)

commit 946a6df
Author: Adam Pugh <[email protected]>
Date:   Mon Jan 27 18:49:29 2025 -0600

    Selection | Lexical: 1 Spelling Update Update selection.md (facebook#7103)

commit ce93ea6
Author: Adam Pugh <[email protected]>
Date:   Mon Jan 27 18:49:25 2025 -0600

    Creating a React Plugin: 1 Grammar Update - Update create_plugin.md (facebook#7104)

commit ed29d89
Author: Adam Pugh <[email protected]>
Date:   Mon Jan 27 18:49:21 2025 -0600

    Working with DOM Events: 2 Spelling and Grammar Updates Update dom-ev… (facebook#7105)

commit 212b70f
Author: James Fitzsimmons <[email protected]>
Date:   Mon Jan 27 08:48:09 2025 +1100

    [lexical-yjs] Bug Fix: handle text node being split by Yjs redo (facebook#7098)

commit 6a98a47
Author: Torleif Berger <[email protected]>
Date:   Fri Jan 24 21:46:45 2025 +0100

    [lexical-react] Bug Fix: Import `JSX` type from React to prevent "Cannot find namespace 'JSX'"-error when type-checking with React 19 (facebook#7080)

commit f8e5968
Author: Tetsuya <[email protected]>
Date:   Sat Jan 25 04:06:57 2025 +0800

    [lexical] Chore: Rename variable and add comments for Safari compositing workaround (facebook#7092)

commit 81c9ab6
Author: Mateo Vuković <[email protected]>
Date:   Fri Jan 24 18:44:05 2025 +0100

    Fix: Use already defined RegisteredNodes type (facebook#7085)

commit 63958a2
Author: Sherry <[email protected]>
Date:   Tue Jan 21 18:15:21 2025 +0800

    [playground] Bug fix: prevent growing whitespaces in markdown table toggle (facebook#7041)

    Co-authored-by: Bob Ippolito <[email protected]>

commit d9f9924
Author: Sherry <[email protected]>
Date:   Tue Jan 21 14:58:08 2025 +0800

    Unrevert [Breaking Change][lexical] Bug Fix: Commit updates on editor.setRootElement(null) facebook#7023 (facebook#7068)

commit 92fa0a3
Author: mohammed shaheer kp <[email protected]>
Date:   Tue Jan 21 06:23:24 2025 +0530

    [lexical-playground] plugins TableOfContent Scroll smooth behaviour A… (facebook#7069)

commit 2e4a63e
Author: Ivaylo Pavlov <[email protected]>
Date:   Mon Jan 20 02:37:34 2025 +0000

    [lexical-playground] Fix Columns Layout Item Overflow (facebook#7066)

commit d319b07
Author: Bob Ippolito <[email protected]>
Date:   Sun Jan 19 14:45:41 2025 -0800

    Change fork modules to use production only when NODE_ENV explicitly set to production (facebook#7065)

commit 46c9c2f
Author: CityHunter <[email protected]>
Date:   Sat Jan 18 13:00:38 2025 +0800

    [lexical] Bug Fix: In the Safari browser, during the compositing event process, the delete key exhibits unexpected behavior. (facebook#7061)

    Co-authored-by: 涂博闻 <[email protected]>

commit 92a1cd7
Author: Violet Rosenzweig <[email protected]>
Date:   Thu Jan 16 18:44:11 2025 -0500

    docs: Change "here" link to more descriptive text (facebook#7058)

commit f6377a3
Author: Aman Harwara <[email protected]>
Date:   Fri Jan 17 02:08:17 2025 +0530

    [lexical-table] Bug Fix: Prevent error if pasted table has empty row (facebook#7057)

commit 0835029
Author: Aman Harwara <[email protected]>
Date:   Fri Jan 17 00:18:08 2025 +0530

    [lexical-list] Bug Fix: Prevent error when calling formatList when selection is at root (facebook#6994)

commit 940435d
Author: Brayden <[email protected]>
Date:   Wed Jan 15 16:10:01 2025 -0800

    fix: iOS Autocorrect strips formatting by reporting wrong dataType (facebook#5789)

    Co-authored-by: Bob Ippolito <[email protected]>

commit 136a565
Author: Aman Harwara <[email protected]>
Date:   Thu Jan 16 04:48:32 2025 +0530

    [lexical-yjs] Feature: Allow passing in custom `syncCursorPositions` function to collab hook (facebook#7053)

commit 415c576
Author: Maksim Horbachevsky <[email protected]>
Date:   Wed Jan 15 18:18:03 2025 -0500

    fix: triple click around inline elements (links) (facebook#7055)

commit a3ef4f3
Author: Ivaylo Pavlov <[email protected]>
Date:   Wed Jan 15 23:15:39 2025 +0000

    [lexical-table] Support table alignment (facebook#7044)

commit 29d733c
Author: Sherry <[email protected]>
Date:   Wed Jan 15 21:50:07 2025 +0800

    Revert [Breaking Change][lexical] Bug Fix: Commit updates on editorSetRootElement(null) (facebook#7023) (facebook#7052)

commit 65ce66a
Author: Bob Ippolito <[email protected]>
Date:   Tue Jan 14 14:57:54 2025 -0800

    [lexical] Bug Fix: Normalize selection after applyDOMRange to account for Firefox differences (facebook#7050)

commit bbc07af
Author: Bob Ippolito <[email protected]>
Date:   Tue Jan 14 08:55:46 2025 -0800

    [*] Bug Fix: Use GITHUB_OUTPUT instead of GITHUB_ENV for size-limit action (facebook#7051)

commit c8f27ed
Author: Bob Ippolito <[email protected]>
Date:   Tue Jan 14 06:36:13 2025 -0800

    [Breaking Change][*] Chore: Use terser for optimizing cjs prod build (facebook#7047)

commit 8bd22d5
Author: Bob Ippolito <[email protected]>
Date:   Mon Jan 13 07:09:31 2025 -0800

    [lexical] Bug Fix: Handle MutationObserver/input event re-ordering when using contentEditable inside of an iframe (facebook#7045)

commit 930629c
Author: Ivaylo Pavlov <[email protected]>
Date:   Sat Jan 11 06:03:30 2025 +0000

    Clean up nested editor update (facebook#7039)

commit bd874a3
Author: Bob Ippolito <[email protected]>
Date:   Fri Jan 10 15:23:54 2025 -0800

    [Breaking Change][lexical][lexical-selection][lexical-list] Bug Fix: Fix infinite loop when splitting invalid ListItemNode (facebook#7037)

commit 541fa43
Author: Bob Ippolito <[email protected]>
Date:   Thu Jan 9 12:42:23 2025 -0800

    v0.23.1 (facebook#7035)

    Co-authored-by: Lexical GitHub Actions Bot <>

commit d7abafd
Author: Bob Ippolito <[email protected]>
Date:   Thu Jan 9 08:33:12 2025 -0800

    [Breaking Change][lexical] Bug Fix: Commit updates on editor.setRootElement(null) (facebook#7023)

commit 6add515
Author: Bob Ippolito <[email protected]>
Date:   Wed Jan 8 17:27:15 2025 -0800

    [lexical] Fix TabNode deserialization regression  (facebook#7031)

commit 33e3677
Author: Maksim Horbachevsky <[email protected]>
Date:   Wed Jan 8 14:59:03 2025 -0500

    [lexical-react] Feature: Merge TabIndentionPlugin and ListMaxIndentLevelPlugin plugins (facebook#7018)

commit 7de86e4
Author: James Fitzsimmons <[email protected]>
Date:   Wed Jan 8 09:45:25 2025 +1100

    [lexical-mark] Bug Fix: reverse ternary in MarkNode.addID (facebook#7020)

commit 7961130
Author: Bob Ippolito <[email protected]>
Date:   Sun Jan 5 13:55:25 2025 -0800

    v0.23.0 (facebook#7017)

    Co-authored-by: Lexical GitHub Actions Bot <>

commit 2b4252d
Author: Aman Harwara <[email protected]>
Date:   Sat Jan 4 11:31:19 2025 +0530

    [lexical-yjs] Feature: Expose function to get anchor and focus nodes for given user awareness state (facebook#6942)

commit 8100d6d
Author: Ivaylo Pavlov <[email protected]>
Date:   Sat Jan 4 01:12:04 2025 +0000

    [lexical-playground] Fix table hover actions button position (facebook#7011)

commit bd1ef2a
Author: Bob Ippolito <[email protected]>
Date:   Fri Jan 3 14:25:31 2025 -0800

    [lexical] Bug Fix: Fix registerNodeTransform regression introduced in facebook#6894 (facebook#7016)

commit 85c08b6
Author: Christian Grøngaard <[email protected]>
Date:   Thu Jan 2 00:20:20 2025 +0100

    [lexical-playground] Refactor: switch headings test file names (facebook#7008)

commit 7c21d4f
Author: Bob Ippolito <[email protected]>
Date:   Wed Jan 1 12:48:12 2025 -0800

    [Breaking Change][lexical] Feature: Add updateFromJSON and move more textFormat/textStyle to ElementNode (facebook#6970)

commit aaa9009
Author: Bob Ippolito <[email protected]>
Date:   Wed Jan 1 07:50:39 2025 -0800

    [lexical] Bug Fix: Fix getNodes over-selection (facebook#7006)

commit 803391d
Author: Sherry <[email protected]>
Date:   Tue Dec 31 11:26:17 2024 +0800

    [__test__] npm upgrade astro (facebook#7001)

commit 684352b
Author: Christian Grøngaard <[email protected]>
Date:   Mon Dec 30 05:12:45 2024 +0100

    Documentation: Fix typo "nest nest"->"nest" in README.md (facebook#7000)

    Co-authored-by: Bob Ippolito <[email protected]>

commit 27b75cc
Author: Sherry <[email protected]>
Date:   Fri Dec 27 11:06:29 2024 +0800

    [__tests__] npm upgrade next (facebook#6996)

commit 05ddbcc
Author: Simon <[email protected]>
Date:   Thu Dec 26 03:37:50 2024 +0100

    [lexical] Bug Fix: Flow is missing some variables and functions (facebook#6977)

commit e79c946
Author: Sherry <[email protected]>
Date:   Tue Dec 24 09:54:46 2024 +0800

    v0.22.0 (facebook#6993)

    Co-authored-by: Lexical GitHub Actions Bot <>

commit c415f7a
Author: Sam Zhou <[email protected]>
Date:   Mon Dec 23 10:31:36 2024 -0800

    [lexical-react] Refactor: Replace `React$MixedElement` and `React$Node` with `React.MixedElement` and `React.Node` (facebook#6984)

commit c844a4d
Author: Sherry <[email protected]>
Date:   Tue Dec 24 02:30:52 2024 +0800

    [lexical] Fix flow error: change this to any (facebook#6992)

commit 6190033
Author: Germán Jabloñski <[email protected]>
Date:   Mon Dec 23 05:19:27 2024 -0300

    Refactor: exportJSON (facebook#6983)

commit e0dafb8
Author: Germán Jabloñski <[email protected]>
Date:   Sat Dec 21 13:59:01 2024 -0300

    feature: expose forEachSelectedTextNode (facebook#6981)

    Co-authored-by: Bob Ippolito <[email protected]>

commit 23715f5
Author: Alex <[email protected]>
Date:   Fri Dec 20 18:23:27 2024 +0300

    [lexical][lexical-table] Bug fix: TablePlugin:  - check is current selection in target table node (facebook#6979)

    Co-authored-by: alazarev <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants