From 08903d9fe1c4ab0be223381c1ee37b1dce34b47f Mon Sep 17 00:00:00 2001 From: Raja Rai Date: Mon, 9 Nov 2026 20:43:35 +0530 Subject: [PATCH] fix(react-form): declare @types/react as an optional peer dependency The React packages ship type declarations that import from `react` but did not declare `@types/react`. With install layouts where it is not resolvable from the package's real path (e.g. pnpm's global virtual store), React types silently became `any`. Fixes #2472 Co-Authored-By: Claude Opus 5.5 --- .changeset/react-types-optional-peer.md | 9 +++++++++ packages/react-form-devtools/package.json | 6 ++++++ packages/react-form-nextjs/package.json | 6 ++++++ packages/react-form-remix/package.json | 6 ++++++ packages/react-form-start/package.json | 4 ++++ packages/react-form/package.json | 4 ++++ 6 files changed, 35 insertions(+) create mode 100644 .changeset/react-types-optional-peer.md diff --git a/.changeset/react-types-optional-peer.md b/.changeset/react-types-optional-peer.md new file mode 100644 index 0000000000..67bd7f0a83 --- /dev/null +++ b/.changeset/react-types-optional-peer.md @@ -0,0 +1,9 @@ +--- +'@tanstack/react-form': patch +'@tanstack/react-form-devtools': patch +'@tanstack/react-form-nextjs': patch +'@tanstack/react-form-remix': patch +'@tanstack/react-form-start': patch +--- + +Declare `@types/react` as an optional peer dependency. The published type declarations import from `react`, so with install layouts where `@types/react` is not resolvable from the package's real path (such as pnpm's global virtual store), React types silently became `any`. Marking it optional keeps JavaScript consumers unaffected. diff --git a/packages/react-form-devtools/package.json b/packages/react-form-devtools/package.json index 7ef82d46f1..3e61c34a2a 100644 --- a/packages/react-form-devtools/package.json +++ b/packages/react-form-devtools/package.json @@ -64,6 +64,12 @@ "vite": "^7.2.2" }, "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } } diff --git a/packages/react-form-nextjs/package.json b/packages/react-form-nextjs/package.json index 6a0fa4ed20..86e6fe2754 100644 --- a/packages/react-form-nextjs/package.json +++ b/packages/react-form-nextjs/package.json @@ -58,6 +58,12 @@ "vite": "^7.2.2" }, "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } } diff --git a/packages/react-form-remix/package.json b/packages/react-form-remix/package.json index e4b87a3115..71d9494b55 100644 --- a/packages/react-form-remix/package.json +++ b/packages/react-form-remix/package.json @@ -58,6 +58,12 @@ "vite": "^7.2.2" }, "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } } diff --git a/packages/react-form-start/package.json b/packages/react-form-start/package.json index 3b3af1d4b5..62b426f624 100644 --- a/packages/react-form-start/package.json +++ b/packages/react-form-start/package.json @@ -63,11 +63,15 @@ }, "peerDependencies": { "@tanstack/react-start": "^1.168.27", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@tanstack/react-start": { "optional": true + }, + "@types/react": { + "optional": true } } } diff --git a/packages/react-form/package.json b/packages/react-form/package.json index 50ade6bfce..c227877fe9 100644 --- a/packages/react-form/package.json +++ b/packages/react-form/package.json @@ -67,11 +67,15 @@ "vitest-browser-react": "^2.3.0" }, "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@tanstack/react-start": { "optional": true + }, + "@types/react": { + "optional": true } } }