diff --git a/.changeset/gentle-moons-shave.md b/.changeset/gentle-moons-shave.md new file mode 100644 index 00000000000..acf93cf0bb5 --- /dev/null +++ b/.changeset/gentle-moons-shave.md @@ -0,0 +1,6 @@ +--- +'@tanstack/react-query': patch +'@tanstack/preact-query': patch +--- + +Default `TData` of `UseInfiniteQueryOptions` and `UseSuspenseInfiniteQueryOptions` to `InfiniteData` so it matches the hook generics. diff --git a/packages/preact-query/src/__tests__/useInfiniteQuery.test-d.tsx b/packages/preact-query/src/__tests__/useInfiniteQuery.test-d.tsx index b11002c9e2c..11fd40f392e 100644 --- a/packages/preact-query/src/__tests__/useInfiniteQuery.test-d.tsx +++ b/packages/preact-query/src/__tests__/useInfiniteQuery.test-d.tsx @@ -3,6 +3,7 @@ import type { InfiniteData } from '@tanstack/query-core' import { queryKey } from '@tanstack/query-test-utils' import { describe, expectTypeOf, it } from 'vitest' +import type { UseInfiniteQueryOptions } from '../types' import { useInfiniteQuery } from '../useInfiniteQuery' describe('pageParam', () => { @@ -142,3 +143,19 @@ describe('error booleans', () => { expectTypeOf(isRefetchError).toEqualTypeOf() }) }) + +describe('UseInfiniteQueryOptions', () => { + it('should default TData to InfiniteData', () => { + const options: UseInfiniteQueryOptions = { + queryKey: queryKey(), + queryFn: () => 5, + initialPageParam: 1, + getNextPageParam: () => undefined, + } + const infiniteQuery = useInfiniteQuery(options) + + expectTypeOf(infiniteQuery.data).toEqualTypeOf< + InfiniteData | undefined + >() + }) +}) diff --git a/packages/preact-query/src/__tests__/useSuspenseInfiniteQuery.test-d.tsx b/packages/preact-query/src/__tests__/useSuspenseInfiniteQuery.test-d.tsx index d2b3835de08..c745afcd4b2 100644 --- a/packages/preact-query/src/__tests__/useSuspenseInfiniteQuery.test-d.tsx +++ b/packages/preact-query/src/__tests__/useSuspenseInfiniteQuery.test-d.tsx @@ -3,6 +3,7 @@ import type { InfiniteData } from '@tanstack/query-core' import { queryKey } from '@tanstack/query-test-utils' import { assertType, describe, expectTypeOf, it } from 'vitest' +import type { UseSuspenseInfiniteQueryOptions } from '../types' import { useSuspenseInfiniteQuery } from '../useSuspenseInfiniteQuery' describe('useSuspenseInfiniteQuery', () => { @@ -82,6 +83,18 @@ describe('useSuspenseInfiniteQuery', () => { ) }) + it('should default TData of UseSuspenseInfiniteQueryOptions to InfiniteData', () => { + const options: UseSuspenseInfiniteQueryOptions = { + queryKey: queryKey(), + queryFn: () => Promise.resolve(5), + initialPageParam: 1, + getNextPageParam: () => 1, + } + const { data } = useSuspenseInfiniteQuery(options) + + expectTypeOf(data).toEqualTypeOf>() + }) + it('should not return isPlaceholderData', () => { const query = useSuspenseInfiniteQuery({ queryKey: queryKey(), diff --git a/packages/preact-query/src/types.ts b/packages/preact-query/src/types.ts index c995a28b08e..135af5a5261 100644 --- a/packages/preact-query/src/types.ts +++ b/packages/preact-query/src/types.ts @@ -5,6 +5,7 @@ import type { DefinedQueryObserverResult, DistributiveOmit, FetchQueryOptions, + InfiniteData, InfiniteQueryObserverOptions, InfiniteQueryObserverResult, MutateFunction, @@ -102,7 +103,7 @@ export type AnyUseInfiniteQueryOptions = UseInfiniteQueryOptions< export interface UseInfiniteQueryOptions< TQueryFnData = unknown, TError = DefaultError, - TData = TQueryFnData, + TData = InfiniteData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, > extends OmitKeyof< @@ -127,7 +128,7 @@ export type AnyUseSuspenseInfiniteQueryOptions = export interface UseSuspenseInfiniteQueryOptions< TQueryFnData = unknown, TError = DefaultError, - TData = TQueryFnData, + TData = InfiniteData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, > extends OmitKeyof< diff --git a/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx b/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx index b4784aa4b09..ae272d85230 100644 --- a/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useInfiniteQuery.test-d.tsx @@ -3,6 +3,7 @@ import { QueryClient } from '@tanstack/query-core' import { queryKey } from '@tanstack/query-test-utils' import { useInfiniteQuery } from '../useInfiniteQuery' import type { InfiniteData } from '@tanstack/query-core' +import type { UseInfiniteQueryOptions } from '../types' describe('pageParam', () => { it('initialPageParam should define type of param passed to queryFunctionContext', () => { @@ -141,3 +142,19 @@ describe('error booleans', () => { expectTypeOf(isRefetchError).toEqualTypeOf() }) }) + +describe('UseInfiniteQueryOptions', () => { + it('should default TData to InfiniteData', () => { + const options: UseInfiniteQueryOptions = { + queryKey: queryKey(), + queryFn: () => 5, + initialPageParam: 1, + getNextPageParam: () => undefined, + } + const infiniteQuery = useInfiniteQuery(options) + + expectTypeOf(infiniteQuery.data).toEqualTypeOf< + InfiniteData | undefined + >() + }) +}) diff --git a/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test-d.tsx b/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test-d.tsx index e656e8cb50c..c9063692068 100644 --- a/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useSuspenseInfiniteQuery.test-d.tsx @@ -3,6 +3,7 @@ import { skipToken } from '@tanstack/query-core' import { queryKey } from '@tanstack/query-test-utils' import { useSuspenseInfiniteQuery } from '../useSuspenseInfiniteQuery' import type { InfiniteData } from '@tanstack/query-core' +import type { UseSuspenseInfiniteQueryOptions } from '../types' describe('useSuspenseInfiniteQuery', () => { it('should always have data defined', () => { @@ -81,6 +82,18 @@ describe('useSuspenseInfiniteQuery', () => { ) }) + it('should default TData of UseSuspenseInfiniteQueryOptions to InfiniteData', () => { + const options: UseSuspenseInfiniteQueryOptions = { + queryKey: queryKey(), + queryFn: () => Promise.resolve(5), + initialPageParam: 1, + getNextPageParam: () => 1, + } + const { data } = useSuspenseInfiniteQuery(options) + + expectTypeOf(data).toEqualTypeOf>() + }) + it('should not return isPlaceholderData', () => { const query = useSuspenseInfiniteQuery({ queryKey: queryKey(), diff --git a/packages/react-query/src/types.ts b/packages/react-query/src/types.ts index 50df2d333f2..e4c446e50e8 100644 --- a/packages/react-query/src/types.ts +++ b/packages/react-query/src/types.ts @@ -6,6 +6,7 @@ import type { DefinedQueryObserverResult, DistributiveOmit, FetchQueryOptions, + InfiniteData, InfiniteQueryObserverOptions, InfiniteQueryObserverResult, MutateFunction, @@ -103,7 +104,7 @@ export type AnyUseInfiniteQueryOptions = UseInfiniteQueryOptions< export interface UseInfiniteQueryOptions< TQueryFnData = unknown, TError = DefaultError, - TData = TQueryFnData, + TData = InfiniteData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, > extends OmitKeyof< @@ -128,7 +129,7 @@ export type AnyUseSuspenseInfiniteQueryOptions = export interface UseSuspenseInfiniteQueryOptions< TQueryFnData = unknown, TError = DefaultError, - TData = TQueryFnData, + TData = InfiniteData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, > extends OmitKeyof<