From fc123dee6320e966ad4215462196a2546dd66027 Mon Sep 17 00:00:00 2001 From: sujin <140687521+nijuse@users.noreply.github.com> Date: Mon, 22 Jun 2026 15:43:25 +0900 Subject: [PATCH] fix(vue-query): preserve useQuery inference for spread queryOptions overrides (#10904) --- .../src/__tests__/useQuery.test-d.ts | 24 ++++++++++++++++++- packages/vue-query/src/useQuery.ts | 20 +++++++++------- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/packages/vue-query/src/__tests__/useQuery.test-d.ts b/packages/vue-query/src/__tests__/useQuery.test-d.ts index be9013e222b..1f22b4dbb09 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 116e91baefe..9fa22b1f777 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 >