diff --git a/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx b/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx index 27ee7529a2..ceedfcaac3 100644 --- a/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx +++ b/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx @@ -4,7 +4,7 @@ import { infiniteQueryOptions } from '../infiniteQueryOptions' import { useInfiniteQuery } from '../useInfiniteQuery' import { useSuspenseInfiniteQuery } from '../useSuspenseInfiniteQuery' import { useQuery } from '../useQuery' -import type { InfiniteData } from '@tanstack/query-core' +import type { InfiniteData, InitialDataFunction } from '@tanstack/query-core' describe('queryOptions', () => { it('should not allow excess properties', () => { @@ -152,4 +152,23 @@ describe('queryOptions', () => { // @ts-expect-error cannot pass infinite options to non-infinite query functions queryClient.prefetchQuery(options) }) + + test('allow optional initialData', () => { + const initialData: { example: boolean } | undefined = { example: true } + const queryOptions = infiniteQueryOptions({ + queryKey: ['example'], + queryFn: async () => initialData, + // initialData below errors + initialData: initialData + ? () => ({ pages: [initialData], pageParams: [] }) + : undefined, + getNextPageParam: () => 1, + initialPageParam: 1, + }) + queryOptions.initialData + expectTypeOf(queryOptions.initialData).toMatchTypeOf< + | InitialDataFunction> + | undefined + >() + }) }) diff --git a/packages/react-query/src/infiniteQueryOptions.ts b/packages/react-query/src/infiniteQueryOptions.ts index a63def60e1..a4273230cc 100644 --- a/packages/react-query/src/infiniteQueryOptions.ts +++ b/packages/react-query/src/infiniteQueryOptions.ts @@ -2,6 +2,7 @@ import type { DataTag, DefaultError, InfiniteData, + InitialDataFunction, QueryKey, } from '@tanstack/query-core' import type { UseInfiniteQueryOptions } from './types' @@ -20,7 +21,11 @@ export type UndefinedInitialDataInfiniteOptions< TQueryKey, TPageParam > & { - initialData?: undefined + initialData?: + | undefined + | InitialDataFunction< + NonUndefinedGuard> + > } type NonUndefinedGuard = T extends undefined ? never : T