Skip to content

Conversation

@michaellopez
Copy link

@michaellopez michaellopez commented Aug 19, 2025

Changes Overview

This PR improves the TypeScript types for the ReactRenderer to provide better type safety and autocompletion for the rendered component props.

Previously, the rendered component props were typed as Record<string, any>, which allowed for common errors like typos or incorrect prop value types to go unnoticed by the compiler. This change ensures that any props passed to the ReactRenderer are correctly validated against the rendered component's actual prop types, leading to a more robust developer experience.

Implementation Approach

The implementation introduces a generic type parameter P to the ReactRenderer class and ReactRendererOptions interface.

This generic P, representing the rendered component's props, is used to strictly type the props object in the constructor.

The updateProps method is now typed to accept Partial<Omit<P, 'ref'>>, ensuring type-safe partial updates and preventing the internally-managed ref prop from being overwritten.

The constructor logic is updated to handle cases where props might be undefined, mostly to avoid type casting in the constructor declaration.

Testing Done

As this is a type-only change, no runtime behavior is altered. All existing unit and integration tests continue to pass. The primary validation for this change is through TypeScript's static analysis, which now correctly identifies type errors at compile time when using the ReactRenderer.

Verification Steps

A verification test was done in a consuming project locally by installing the @tiptap/react package via pnpm add file:<path to clone>/packages/react. The improved types worked as expected when autocompleting and inspecting them.

Additional Notes

Checklist

  • I have created a changeset for this PR if necessary.
  • My changes do not break the library.
    - [ ] I have added tests where applicable.
  • I have followed the project guidelines.
  • I have fixed any lint issues.

Related Issues

@changeset-bot
Copy link

changeset-bot bot commented Aug 19, 2025

🦋 Changeset detected

Latest commit: bf688d0

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 69 packages
Name Type
@tiptap/react Patch
@tiptap/extension-drag-handle-react Patch
@tiptap/core Patch
@tiptap/extension-blockquote Patch
@tiptap/extension-bold Patch
@tiptap/extension-bubble-menu Patch
@tiptap/extension-bullet-list Patch
@tiptap/extension-code-block-lowlight Patch
@tiptap/extension-code-block Patch
@tiptap/extension-code Patch
@tiptap/extension-collaboration-caret Patch
@tiptap/extension-collaboration Patch
@tiptap/extension-color Patch
@tiptap/extension-details Patch
@tiptap/extension-document Patch
@tiptap/extension-drag-handle-vue-2 Patch
@tiptap/extension-drag-handle-vue-3 Patch
@tiptap/extension-drag-handle Patch
@tiptap/extension-emoji Patch
@tiptap/extension-file-handler Patch
@tiptap/extension-floating-menu Patch
@tiptap/extension-font-family Patch
@tiptap/extension-hard-break Patch
@tiptap/extension-heading Patch
@tiptap/extension-highlight Patch
@tiptap/extension-horizontal-rule Patch
@tiptap/extension-image Patch
@tiptap/extension-invisible-characters Patch
@tiptap/extension-italic Patch
@tiptap/extension-link Patch
@tiptap/extension-list Patch
@tiptap/extension-mathematics Patch
@tiptap/extension-mention Patch
@tiptap/extension-node-range Patch
@tiptap/extension-ordered-list Patch
@tiptap/extension-paragraph Patch
@tiptap/extension-strike Patch
@tiptap/extension-subscript Patch
@tiptap/extension-superscript Patch
@tiptap/extension-table-of-contents Patch
@tiptap/extension-table Patch
@tiptap/extension-text-align Patch
@tiptap/extension-text-style Patch
@tiptap/extension-text Patch
@tiptap/extension-typography Patch
@tiptap/extension-underline Patch
@tiptap/extension-unique-id Patch
@tiptap/extension-youtube Patch
@tiptap/extensions Patch
@tiptap/html Patch
@tiptap/pm Patch
@tiptap/starter-kit Patch
@tiptap/static-renderer Patch
@tiptap/suggestion Patch
@tiptap/vue-2 Patch
@tiptap/vue-3 Patch
@tiptap/extension-character-count Patch
@tiptap/extension-dropcursor Patch
@tiptap/extension-focus Patch
@tiptap/extension-gapcursor Patch
@tiptap/extension-history Patch
@tiptap/extension-list-item Patch
@tiptap/extension-list-keymap Patch
@tiptap/extension-placeholder Patch
@tiptap/extension-table-cell Patch
@tiptap/extension-table-header Patch
@tiptap/extension-table-row Patch
@tiptap/extension-task-item Patch
@tiptap/extension-task-list Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@netlify
Copy link

netlify bot commented Aug 19, 2025

Deploy Preview for tiptap-embed ready!

Name Link
🔨 Latest commit bf688d0
🔍 Latest deploy log https://app.netlify.com/projects/tiptap-embed/deploys/68ba0d53aa81a90007e5f5b0
😎 Deploy Preview https://deploy-preview-6843--tiptap-embed.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@michaellopez michaellopez force-pushed the fix/ts-reactrenderer-props branch 2 times, most recently from 60df379 to 018211b Compare August 19, 2025 17:53
@michaellopez michaellopez force-pushed the fix/ts-reactrenderer-props branch from 37ec77d to bf688d0 Compare September 4, 2025 22:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant