fix(vue-query): fix queryOptions return type to expose all properties #10105
+53
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
queryOptionsreturn type in vue-query to expose all query option properties (queryFn,staleTime,select, etc.) for direct access, not justqueryKeyandinitialDataExclude<T, Ref | ComputedRef>to remove Ref/ComputedRef branches from theMaybeRefunion in the return type, sincequeryOptionsalways returns a plain objectuseQueriestype inference (GetUseQueryOptionsForUseQueriesandGetUseQueryResult) to handle the new plain return type via DataTag-based matchingqueryOptionsresultFixes #7892
Details
The root cause was that
UndefinedInitialQueryOptionsandDefinedInitialQueryOptionsare defined asMaybeRef<Inner> & { initialData }, whereMaybeRef<T> = T | Ref<T> | ComputedRef<T>. When TypeScript resolves property access on this union type, it only shows properties common to all union members. SinceRef<T>only has.valueandComputedRef<T>only has.value/.effect, the common properties were limited toqueryKey(from the& { queryKey }intersection) andinitialData.The fix uses
Exclude<T, Ref<any> | ComputedRef<any>>(aliased asPlainQueryOptions<T>) in thequeryOptionsreturn type to strip theRefandComputedRefbranches from the union. This is safe becausequeryOptionsalways accepts and returns plain objects, never Vue refs.Test plan
options.queryFnandoptions.queryKeyare accessibleSummary by CodeRabbit
queryOptions()to properly expose all query option properties (such asqueryFnandstaleTime) for direct access via dot notation, improving type inference and developer experience.