Declare @types/react as an optional peer dependency

Aperta Adatta ai principianti
#10,940 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
76/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
react, typescript

Direzione di ricerca

Inizia controllando peerDependencies e peerDependenciesMeta nei manifesti dei pacchetti react-aria-components, react-aria, react-stately e @react-types/shared, quindi confronta gli intervalli peer React esistenti. Aggiungi i metadati peer opzionali per @types/react ai pacchetti interessati e verifica che i manifesti e i metadati dei pacchetti generati li includano. Il lavoro è completato quando i pacchetti dichiarano il peer opzionale e la riproduzione fornita della risoluzione TypeScript risolve correttamente i tipi React.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

react-aria-components, react-aria, react-stately, @react-types/shared ship type declarations that import from react but don't declare @types/react.

With an install layout where packages live outside the project, such as pnpm's global virtual store (virtualStoreType: global), TypeScript resolves react from the package's real path. The react peer is linked next to the package, @types/react is not, so TypeScript picks the untyped react/index.js and every React type in these declarations silently becomes any.

Consumers see it as errors in their own code, for example TS7006: Parameter 'x' implicitly has an 'any' type on callback parameters, or component props that lose children and className. Under pnpm's default layout it only works through pnpm's hidden hoisting fallback (node_modules/.pnpm/node_modules).

Affected versions: [email protected], [email protected], [email protected], @react-types/[email protected]

Reproduction

pnpm 12.18.0:

mkdir repro && cd repro
echo '{ "name": "repro", "private": true }' > package.json
echo 'virtualStoreType: global' > pnpm-workspace.yaml
pnpm add react-aria-components react react-dom @types/react typescript
echo 'import "react-aria-components";' > index.ts
pnpm exec tsc --noEmit --traceResolution --module esnext --moduleResolution bundler --jsx react-jsx index.ts | grep "Module name 'react' was"

Expected: react resolves to @types/react/index.d.ts.

Actual: .../pnpm/store/v11/links/@/react/<version>/<hash>/node_modules/react/index.js

Suggested fix

"peerDependencies": {
    "@types/react": "*"
},
"peerDependenciesMeta": {
    "@types/react": { "optional": true }
}

Optional, so JavaScript consumers are unaffected. The range can mirror the existing react peer range. react-router, @tanstack/react-query and recharts (recharts#7710) do the same.

Consumer-side workarounds until then: pnpm's addMissingPeerTypes (pnpm 12.12+) or packageExtensions. Related: pnpm/pnpm#9739.

Lingua principale
TypeScript
Stelle
16k
Fork
1.6k
Merge medio
4g 3h
PR unite (30g)
39

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di adobe/react-spectrum

Tutte le issue di adobe/react-spectrum

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.