From fcee7bdc429385ae8ffa224fa8a7a9ec7b8ee380 Mon Sep 17 00:00:00 2001 From: Neef Rehman Date: Sun, 3 May 2026 13:34:10 +0100 Subject: [PATCH 1/3] fix(query-core): restore NoInfer on persister's TQueryKey (#10601) Follow-up to #10510. That PR removed NoInfer from all three persister generics to fix TQueryFnData inference when the companion queryFn declares a parameter (#7842). Keeping NoInfer on TQueryKey preserves that fix while preventing the persister slot from widening TQueryKey inference. Without NoInfer on TQueryKey, the persister slot contributes to TQueryKey inference. When Register.queryKey is augmented to a narrowed constraint, TQueryKey widens to that constraint instead of the literal passed to queryKey. Wrappers that brand their return with DataTag then produce a brand on the wider type, which a plain literal tuple can no longer satisfy in contravariant positions (vi.mocked(...).mockReturnValue, typed variable assignments, etc.). TQueryFnData still participates in inference, so #10510's positive and negative type tests continue to pass. Co-authored-by: Wonsuk Choi --- .changeset/fix-persister-query-key-infer.md | 5 +++++ packages/query-core/src/types.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/fix-persister-query-key-infer.md diff --git a/.changeset/fix-persister-query-key-infer.md b/.changeset/fix-persister-query-key-infer.md new file mode 100644 index 00000000000..e721d6dcfb9 --- /dev/null +++ b/.changeset/fix-persister-query-key-infer.md @@ -0,0 +1,5 @@ +--- +'@tanstack/query-core': patch +--- + +fix(query-core): wrap `persister`'s `TQueryKey` in `NoInfer` so that the `persister` slot no longer contributes to `TQueryKey` inference. Follow-up to #10510, which removed `NoInfer` on all three `persister` generics. Preserving `NoInfer` keeps that fix's benefit for `TQueryFnData` while preventing `TQueryKey` from widening to the augmented constraint when `Register.queryKey` is narrowed — which made `DataTag`-branded wrapper returns un-assignable in contravariant slots. diff --git a/packages/query-core/src/types.ts b/packages/query-core/src/types.ts index 6e26b02746a..dcd5f7e9e2e 100644 --- a/packages/query-core/src/types.ts +++ b/packages/query-core/src/types.ts @@ -246,7 +246,7 @@ export interface QueryOptions< */ gcTime?: number queryFn?: QueryFunction | SkipToken - persister?: QueryPersister + persister?: QueryPersister, TPageParam> queryHash?: string queryKey?: TQueryKey queryKeyHashFn?: QueryKeyHashFunction From 3d21cacdec3028b700c4c2e3e0ff8dbe7a235e8c Mon Sep 17 00:00:00 2001 From: Dami Oyeniyi Date: Sun, 3 May 2026 14:13:30 +0100 Subject: [PATCH 2/3] fix(query-devtools): align onClose setter type (#10607) --- .changeset/query-devtools-onclose-setter-type.md | 5 +++++ packages/query-devtools/src/TanstackQueryDevtoolsPanel.tsx | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .changeset/query-devtools-onclose-setter-type.md diff --git a/.changeset/query-devtools-onclose-setter-type.md b/.changeset/query-devtools-onclose-setter-type.md new file mode 100644 index 00000000000..1e615ae3b67 --- /dev/null +++ b/.changeset/query-devtools-onclose-setter-type.md @@ -0,0 +1,5 @@ +--- +'@tanstack/query-devtools': patch +--- + +Update the devtools panel `setOnClose` callback type to return `void`. diff --git a/packages/query-devtools/src/TanstackQueryDevtoolsPanel.tsx b/packages/query-devtools/src/TanstackQueryDevtoolsPanel.tsx index 6294a6de659..42ee5631961 100644 --- a/packages/query-devtools/src/TanstackQueryDevtoolsPanel.tsx +++ b/packages/query-devtools/src/TanstackQueryDevtoolsPanel.tsx @@ -34,7 +34,7 @@ class TanstackQueryDevtoolsPanel { #initialIsOpen: Signal #errorTypes: Signal | undefined> #hideDisabledQueries: Signal - #onClose: Signal<(() => unknown) | undefined> + #onClose: Signal<(() => void) | undefined> #Component: DevtoolsComponentType | undefined #theme: Signal #dispose?: () => void @@ -90,7 +90,7 @@ class TanstackQueryDevtoolsPanel { this.#client[1](client) } - setOnClose(onClose: () => unknown) { + setOnClose(onClose: () => void) { this.#onClose[1](() => onClose) } From 14926b7615c0a8df5f8d765b18910c3676e42f8a Mon Sep 17 00:00:00 2001 From: Matt Cowley Date: Sun, 3 May 2026 14:16:06 +0100 Subject: [PATCH 3/3] docs: remove typo in QueryOptions#retry JSDoc (#10606) fix: remove typo in QueryOptions#retry JSDoc --- packages/query-core/src/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/query-core/src/types.ts b/packages/query-core/src/types.ts index dcd5f7e9e2e..6cfe16484e5 100644 --- a/packages/query-core/src/types.ts +++ b/packages/query-core/src/types.ts @@ -231,7 +231,7 @@ export interface QueryOptions< > { /** * If `false`, failed queries will not retry by default. - * If `true`, failed queries will retry infinitely., failureCount: num + * If `true`, failed queries will retry infinitely. * If set to an integer number, e.g. 3, failed queries will retry until the failed query count meets that number. * If set to a function `(failureCount, error) => boolean` failed queries will retry until the function returns false. */