diff --git a/packages/vue-query/src/__tests__/useInfiniteQuery.test-d.tsx b/packages/vue-query/src/__tests__/useInfiniteQuery.test-d.tsx index a7871c1ea5..3ca41df8ac 100644 --- a/packages/vue-query/src/__tests__/useInfiniteQuery.test-d.tsx +++ b/packages/vue-query/src/__tests__/useInfiniteQuery.test-d.tsx @@ -1,5 +1,5 @@ import { describe, expectTypeOf, it } from 'vitest' -import { reactive } from 'vue-demi' +import { computed, reactive } from 'vue-demi' import { useInfiniteQuery } from '../useInfiniteQuery' import { simpleFetcher } from './test-utils' import type { InfiniteData } from '@tanstack/query-core' @@ -81,4 +81,18 @@ describe('Discriminated union return type', () => { expectTypeOf(query.error).toEqualTypeOf() } }) + + it('should accept computed options', () => { + const options = computed(() => ({ + queryKey: ['infiniteQuery'], + queryFn: simpleFetcher, + getNextPageParam: () => undefined, + initialPageParam: 0, + })) + const query = reactive(useInfiniteQuery(options)) + + if (query.isSuccess) { + expectTypeOf(query.data).toEqualTypeOf>() + } + }) }) diff --git a/packages/vue-query/src/useInfiniteQuery.ts b/packages/vue-query/src/useInfiniteQuery.ts index c4a9bcb681..2ec30b25c8 100644 --- a/packages/vue-query/src/useInfiniteQuery.ts +++ b/packages/vue-query/src/useInfiniteQuery.ts @@ -1,5 +1,9 @@ import { InfiniteQueryObserver } from '@tanstack/query-core' import { useBaseQuery } from './useBaseQuery' +import type { + DefinedInitialDataInfiniteOptions, + UndefinedInitialDataInfiniteOptions, +} from './infiniteQueryOptions' import type { DefaultError, InfiniteData, @@ -11,7 +15,12 @@ import type { import type { UseBaseQueryReturnType } from './useBaseQuery' -import type { DeepUnwrapRef, MaybeRefDeep, MaybeRefOrGetter } from './types' +import type { + DeepUnwrapRef, + MaybeRef, + MaybeRefDeep, + MaybeRefOrGetter, +} from './types' import type { QueryClient } from './queryClient' export type UseInfiniteQueryOptions< @@ -21,37 +30,39 @@ export type UseInfiniteQueryOptions< TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, -> = { - [Property in keyof InfiniteQueryObserverOptions< - TQueryFnData, - TError, - TData, - TQueryData, - TQueryKey, - TPageParam - >]: Property extends 'enabled' - ? MaybeRefOrGetter< - InfiniteQueryObserverOptions< - TQueryFnData, - TError, - TData, - TQueryData, - DeepUnwrapRef - >[Property] - > - : MaybeRefDeep< - InfiniteQueryObserverOptions< - TQueryFnData, - TError, - TData, - TQueryData, - DeepUnwrapRef, - TPageParam - >[Property] - > -} & { - shallow?: boolean -} +> = MaybeRef< + { + [Property in keyof InfiniteQueryObserverOptions< + TQueryFnData, + TError, + TData, + TQueryData, + TQueryKey, + TPageParam + >]: Property extends 'enabled' + ? MaybeRefOrGetter< + InfiniteQueryObserverOptions< + TQueryFnData, + TError, + TData, + TQueryData, + DeepUnwrapRef + >[Property] + > + : MaybeRefDeep< + InfiniteQueryObserverOptions< + TQueryFnData, + TError, + TData, + TQueryData, + DeepUnwrapRef, + TPageParam + >[Property] + > + } & { + shallow?: boolean + } +> export type UseInfiniteQueryReturnType = UseBaseQueryReturnType< TData, @@ -59,6 +70,40 @@ export type UseInfiniteQueryReturnType = UseBaseQueryReturnType< InfiniteQueryObserverResult > +export function useInfiniteQuery< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +>( + options: DefinedInitialDataInfiniteOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >, + queryClient?: QueryClient, +): UseInfiniteQueryReturnType + +export function useInfiniteQuery< + TQueryFnData, + TError = DefaultError, + TData = InfiniteData, + TQueryKey extends QueryKey = QueryKey, + TPageParam = unknown, +>( + options: UndefinedInitialDataInfiniteOptions< + TQueryFnData, + TError, + TData, + TQueryKey, + TPageParam + >, + queryClient?: QueryClient, +): UseInfiniteQueryReturnType + export function useInfiniteQuery< TQueryFnData, TError = DefaultError, @@ -75,10 +120,16 @@ export function useInfiniteQuery< TPageParam >, queryClient?: QueryClient, -): UseInfiniteQueryReturnType { +): UseInfiniteQueryReturnType + +export function useInfiniteQuery( + options: UseInfiniteQueryOptions, + queryClient?: QueryClient, +) { return useBaseQuery( + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion InfiniteQueryObserver as typeof QueryObserver, options, queryClient, - ) as UseInfiniteQueryReturnType + ) }