diff --git a/packages/vue-query/src/__tests__/useQuery.test-d.ts b/packages/vue-query/src/__tests__/useQuery.test-d.ts index be9013e222..1f22b4dbb0 100644 --- a/packages/vue-query/src/__tests__/useQuery.test-d.ts +++ b/packages/vue-query/src/__tests__/useQuery.test-d.ts @@ -1,5 +1,5 @@ import { describe, expectTypeOf, it } from 'vitest' -import { computed, reactive, ref } from 'vue-demi' +import { computed, reactive, ref, type MaybeRefOrGetter, toValue } from 'vue-demi' import { queryKey, sleep } from '@tanstack/query-test-utils' import { queryOptions, useQuery } from '..' import type { OmitKeyof, UseQueryOptions } from '..' @@ -63,6 +63,28 @@ describe('useQuery', () => { expectTypeOf(query.data).toEqualTypeOf() }) + it('should allow spreading queryOptions with a non-data-shaping override like enabled', () => { + const fooQueryOptions = (id: MaybeRefOrGetter) => + queryOptions({ + queryKey: computed(() => ['foo', toValue(id)] as const), + queryFn: async () => { + const v = toValue(id) + return v ? { id: v } : null + }, + }) + + const direct = reactive(useQuery(fooQueryOptions('1'))) + expectTypeOf(direct.data).toEqualTypeOf<{ id: string } | null | undefined>() + + const spread = reactive( + useQuery({ + ...fooQueryOptions('1'), + enabled: () => true, + }), + ) + expectTypeOf(spread.data).toEqualTypeOf<{ id: string } | null | undefined>() + }) + it('TData should always be defined when initialData is provided as a function which ALWAYS returns the data', () => { const key = queryKey() diff --git a/packages/vue-query/src/useQuery.ts b/packages/vue-query/src/useQuery.ts index 116e91baef..9fa22b1f77 100644 --- a/packages/vue-query/src/useQuery.ts +++ b/packages/vue-query/src/useQuery.ts @@ -42,15 +42,17 @@ export type UseQueryOptions< TQueryData, DeepUnwrapRef >) - : MaybeRefDeep< - QueryObserverOptions< - TQueryFnData, - TError, - TData, - TQueryData, - DeepUnwrapRef - >[Property] - > + : Property extends 'queryKey' + ? MaybeRefOrGetter + : MaybeRefDeep< + QueryObserverOptions< + TQueryFnData, + TError, + TData, + TQueryData, + DeepUnwrapRef + >[Property] + > } & ShallowOption >