diff --git a/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx b/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx index 78243a4f3f..fd8bd57917 100644 --- a/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx +++ b/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx @@ -158,14 +158,12 @@ describe('infiniteQueryOptions', () => { 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> | InfiniteData<{ example: boolean }, number> @@ -178,14 +176,12 @@ describe('infiniteQueryOptions', () => { 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> | InfiniteData<{ example: boolean }, number> diff --git a/packages/react-query/src/__tests__/queryOptions.test-d.tsx b/packages/react-query/src/__tests__/queryOptions.test-d.tsx index 03958a63a0..f833d0db5a 100644 --- a/packages/react-query/src/__tests__/queryOptions.test-d.tsx +++ b/packages/react-query/src/__tests__/queryOptions.test-d.tsx @@ -9,7 +9,10 @@ import { queryOptions } from '../queryOptions' import { useQuery } from '../useQuery' import { useQueries } from '../useQueries' import { useSuspenseQuery } from '../useSuspenseQuery' -import type { QueryObserverResult } from '@tanstack/query-core' +import type { + InitialDataFunction, + QueryObserverResult, +} from '@tanstack/query-core' describe('queryOptions', () => { it('should not allow excess properties', () => { @@ -205,4 +208,19 @@ describe('queryOptions', () => { }, }) }) + + it('should allow optional initialData object', () => { + const testFn = (id?: string) => { + const options = queryOptions({ + queryKey: ['test'], + queryFn: async () => 'something string', + initialData: id ? 'initial string' : undefined, + }) + expectTypeOf(options.initialData).toMatchTypeOf< + InitialDataFunction | string | undefined + >() + } + testFn('id') + testFn() + }) }) diff --git a/packages/react-query/src/infiniteQueryOptions.ts b/packages/react-query/src/infiniteQueryOptions.ts index 240aada9f2..134cbabcec 100644 --- a/packages/react-query/src/infiniteQueryOptions.ts +++ b/packages/react-query/src/infiniteQueryOptions.ts @@ -48,6 +48,7 @@ export type DefinedInitialDataInfiniteOptions< initialData: | NonUndefinedGuard> | (() => NonUndefinedGuard>) + | undefined } export function infiniteQueryOptions< diff --git a/packages/react-query/src/queryOptions.ts b/packages/react-query/src/queryOptions.ts index ec1c11aa2c..b659cc034f 100644 --- a/packages/react-query/src/queryOptions.ts +++ b/packages/react-query/src/queryOptions.ts @@ -12,7 +12,10 @@ export type UndefinedInitialDataOptions< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, > = UseQueryOptions & { - initialData?: undefined | InitialDataFunction> + initialData?: + | undefined + | InitialDataFunction> + | NonUndefinedGuard } type NonUndefinedGuard = T extends undefined ? never : T