From cf54a0d6fac0a79528cd75f9784fa682fdb1e353 Mon Sep 17 00:00:00 2001 From: TkDodo Date: Fri, 21 Aug 2026 16:09:29 +0200 Subject: [PATCH 1/3] revert: remove NoInfer from useQuery return types --- .../src/__tests__/useQuery.test-d.tsx | 17 ----------------- packages/preact-query/src/useQuery.ts | 6 +++--- .../src/__tests__/useQuery.test-d.tsx | 16 ---------------- packages/react-query/src/useQuery.ts | 6 +++--- 4 files changed, 6 insertions(+), 39 deletions(-) diff --git a/packages/preact-query/src/__tests__/useQuery.test-d.tsx b/packages/preact-query/src/__tests__/useQuery.test-d.tsx index a663531d215..7944121628a 100644 --- a/packages/preact-query/src/__tests__/useQuery.test-d.tsx +++ b/packages/preact-query/src/__tests__/useQuery.test-d.tsx @@ -278,23 +278,6 @@ describe('useQuery', () => { } }) - // eslint-disable-next-line vitest/expect-expect - it('TData should depend from only arguments, not the result', () => { - // @ts-expect-error - // eslint-disable-next-line - const result: UseQueryResult<{ wow: string }> = useQuery({ - queryKey: queryKey(), - queryFn: () => { - return { - wow: true, - } - }, - initialData: () => undefined as { wow: boolean } | undefined, - }) - - void result - }) - it('data should not have undefined when initialData is provided', () => { const { data } = useQuery({ queryKey: queryKey(), diff --git a/packages/preact-query/src/useQuery.ts b/packages/preact-query/src/useQuery.ts index 6d462bc9dd7..2d6c5dcec1c 100644 --- a/packages/preact-query/src/useQuery.ts +++ b/packages/preact-query/src/useQuery.ts @@ -20,7 +20,7 @@ export function useQuery< >( options: DefinedInitialDataOptions, queryClient?: QueryClient, -): DefinedUseQueryResult, TError> +): DefinedUseQueryResult export function useQuery< TQueryFnData = unknown, @@ -30,7 +30,7 @@ export function useQuery< >( options: UndefinedInitialDataOptions, queryClient?: QueryClient, -): UseQueryResult, TError> +): UseQueryResult export function useQuery< TQueryFnData = unknown, @@ -40,7 +40,7 @@ export function useQuery< >( options: UseQueryOptions, queryClient?: QueryClient, -): UseQueryResult, TError> +): UseQueryResult export function useQuery(options: UseQueryOptions, queryClient?: QueryClient) { return useBaseQuery(options, QueryObserver, queryClient) diff --git a/packages/react-query/src/__tests__/useQuery.test-d.tsx b/packages/react-query/src/__tests__/useQuery.test-d.tsx index b72347821d8..456b1dfd6b8 100644 --- a/packages/react-query/src/__tests__/useQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useQuery.test-d.tsx @@ -277,22 +277,6 @@ describe('useQuery', () => { } }) - // eslint-disable-next-line vitest/expect-expect - it('TData should depend from only arguments, not the result', () => { - // @ts-expect-error - const result: UseQueryResult<{ wow: string }> = useQuery({ - queryKey: queryKey(), - queryFn: () => { - return { - wow: true, - } - }, - initialData: () => undefined as { wow: boolean } | undefined, - }) - - void result - }) - it('data should not have undefined when initialData is provided', () => { const { data } = useQuery({ queryKey: queryKey(), diff --git a/packages/react-query/src/useQuery.ts b/packages/react-query/src/useQuery.ts index c0f2a6a8404..962ef4da66b 100644 --- a/packages/react-query/src/useQuery.ts +++ b/packages/react-query/src/useQuery.ts @@ -20,7 +20,7 @@ export function useQuery< >( options: DefinedInitialDataOptions, queryClient?: QueryClient, -): DefinedUseQueryResult, TError> +): DefinedUseQueryResult export function useQuery< TQueryFnData = unknown, @@ -30,7 +30,7 @@ export function useQuery< >( options: UndefinedInitialDataOptions, queryClient?: QueryClient, -): UseQueryResult, TError> +): UseQueryResult export function useQuery< TQueryFnData = unknown, @@ -40,7 +40,7 @@ export function useQuery< >( options: UseQueryOptions, queryClient?: QueryClient, -): UseQueryResult, TError> +): UseQueryResult export function useQuery(options: UseQueryOptions, queryClient?: QueryClient) { return useBaseQuery(options, QueryObserver, queryClient) From 4337ce830d3947fb73a360d98d990009bec34b18 Mon Sep 17 00:00:00 2001 From: TkDodo Date: Fri, 21 Aug 2026 16:10:43 +0200 Subject: [PATCH 2/3] add union type tests --- .../src/__tests__/useQuery.test-d.tsx | 17 +++++++++++++++++ .../src/__tests__/useQuery.test-d.tsx | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/packages/preact-query/src/__tests__/useQuery.test-d.tsx b/packages/preact-query/src/__tests__/useQuery.test-d.tsx index 7944121628a..c95364b2461 100644 --- a/packages/preact-query/src/__tests__/useQuery.test-d.tsx +++ b/packages/preact-query/src/__tests__/useQuery.test-d.tsx @@ -288,6 +288,23 @@ describe('useQuery', () => { }) }) + it('should preserve discriminated-union narrowing', () => { + type Result = + | { type: 'first'; first: string } + | { type: 'second'; second: string } + + const query = useQuery({ + queryKey: queryKey(), + queryFn: (): Result => ({ type: 'first', first: 'a' }), + }) + + const second = query.data?.type === 'first' ? undefined : query.data + + expectTypeOf(second).toEqualTypeOf< + { type: 'second'; second: string } | undefined + >() + }) + describe('custom hook', () => { it('should allow custom hooks using UseQueryOptions', () => { type Data = string diff --git a/packages/react-query/src/__tests__/useQuery.test-d.tsx b/packages/react-query/src/__tests__/useQuery.test-d.tsx index 456b1dfd6b8..ed37ad71468 100644 --- a/packages/react-query/src/__tests__/useQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useQuery.test-d.tsx @@ -277,6 +277,23 @@ describe('useQuery', () => { } }) + it('should preserve discriminated-union narrowing', () => { + type Result = + | { type: 'first'; first: string } + | { type: 'second'; second: string } + + const query = useQuery({ + queryKey: queryKey(), + queryFn: (): Result => ({ type: 'first', first: 'a' }), + }) + + const second = query.data?.type === 'first' ? undefined : query.data + + expectTypeOf(second).toEqualTypeOf< + { type: 'second'; second: string } | undefined + >() + }) + it('data should not have undefined when initialData is provided', () => { const { data } = useQuery({ queryKey: queryKey(), From 616c161d410c46649cff32197dd4d8921f27898a Mon Sep 17 00:00:00 2001 From: TkDodo Date: Fri, 21 Aug 2026 16:12:05 +0200 Subject: [PATCH 3/3] changeset --- .changeset/dull-masks-melt.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/dull-masks-melt.md diff --git a/.changeset/dull-masks-melt.md b/.changeset/dull-masks-melt.md new file mode 100644 index 00000000000..d5dac73cacd --- /dev/null +++ b/.changeset/dull-masks-melt.md @@ -0,0 +1,6 @@ +--- +'@tanstack/preact-query': patch +'@tanstack/react-query': patch +--- + +revert: remove NoInfer from useQuery return types