`@types/react@^18` in `dependencies` breaks type-checking in React 19 projects

Fermée
#2,594 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
50/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
react, typescript
Domaine
build-system

Piste de recherche

The problem is the @types/react entry under dependencies in the braintrust package manifest, added with #2191 for the braintrust/custom-views typings in dist/custom-views.d.ts. Read the manifest and check whether custom views need React types at all. The suggested fix moves @types/react to an optional peer dependency, which is a maintainer decision, so confirm the approach before editing. Done means a React 19 project installs no React 18 types, and custom-views consumers still type-check.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Summary

Since 3.33.0, braintrust lists @types/react: ^18.3.1 under dependencies. As far as I can tell it is only needed for the braintrust/custom-views type definitions (dist/custom-views.d.ts imports ReactNode from react), which came in with #2191.

Because it is a hard dependency, every consumer gets React 18 types installed, including projects that don't use custom views or don't use React at all. In a React 19 project, this can break tsc.

What happened

We use pnpm (workspace) and React 19 (@types/react@19). After upgrading braintrust from 3.32.0 to 3.35.0, pnpm hoisted @types/[email protected] into node_modules/.pnpm/node_modules. Packages that import types from react without declaring @types/react themselves (in our case @sentry/react) then resolved React 18 types, while our own code used React 19 types. tsc --noEmit failed with errors like this:

error TS2322: Type 'React.ReactNode' is not assignable to type 'import(".../@[email protected]/node_modules/@types/react/index").ReactNode'.
  Type 'ReactElement<unknown, string | JSXElementConstructor<any>>' is not assignable to type 'ReactNode'.
    Property 'children' is missing in type 'ReactElement<unknown, string | JSXElementConstructor<any>>' but required in type 'ReactPortal'.

We work around it with a pnpm override ("braintrust>@types/react": "^19"), or by staying on 3.32.0.

Versions
  • braintrust: 3.33.0 – 3.37.1 (not in 3.32.0)
  • @types/react in the project: 19.2.x
  • Package manager: pnpm 11 (workspace)
Suggestion

Declare @types/react (and react, if needed) as an optional peer dependency, for example:

"peerDependencies": {
  "@types/react": ">=18"
},
"peerDependenciesMeta": {
  "@types/react": { "optional": true }
}

That way, projects that use custom views get the @types/react they already have, whatever its version, and other projects don't get React types installed at all.

Langage dominant
TypeScript
Étoiles
29
Forks
22
Merge moyen
1 j 6 h
PR mergées (30 j)
69

Préparer son environnement

  • Fournit un Dockerfile ou un fichier Docker Compose
  • Aucun modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de braintrustdata/braintrust-sdk-javascript

Toutes les issues de braintrustdata/braintrust-sdk-javascript

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.