Skip to content

Commit dee8028

Browse files
committed
fix: use intersection types for compatibility with useQuery
- Replace QueryObserverOptions with intersection of existing types - Maintains compatibility with useQuery overloads - Uses UndefinedInitialQueryOptions & DefinedInitialQueryOptions as base - Explicitly exposes queryKey and queryFn properties - Update test to use toMatchTypeOf for intersection types
1 parent 617721b commit dee8028

File tree

2 files changed

+22
-37
lines changed

2 files changed

+22
-37
lines changed

packages/vue-query/src/__tests__/queryOptions.test-d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ describe('queryOptions', () => {
1414
})
1515

1616
// These should be accessible without TS errors (issue #7892)
17-
expectTypeOf(options.queryFn).toEqualTypeOf<
17+
expectTypeOf(options.queryFn).toMatchTypeOf<
1818
(() => Promise<number>) | undefined
1919
>()
20-
expectTypeOf(options.staleTime).toEqualTypeOf<number | undefined>()
20+
expectTypeOf(options.staleTime).toMatchTypeOf<number | undefined>()
2121
expectTypeOf(options.queryKey).toMatchTypeOf<readonly unknown[]>()
2222
})
2323

packages/vue-query/src/queryOptions.ts

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,42 @@
11
import type {
22
DataTag,
33
DefaultError,
4-
InitialDataFunction,
5-
NonUndefinedGuard,
4+
QueryFunction,
65
QueryKey,
7-
QueryObserverOptions,
86
} from '@tanstack/query-core'
9-
import type { DeepUnwrapRef, ShallowOption } from './types'
7+
import type {
8+
DefinedInitialQueryOptions,
9+
UndefinedInitialQueryOptions,
10+
} from './useQuery'
11+
import type { DeepUnwrapRef } from './types'
1012

1113
/**
12-
* Options for queryOptions with defined initial data.
13-
* These are unwrapped types (not MaybeRef) so that properties like queryFn are directly accessible.
14+
* Augmented version of UndefinedInitialQueryOptions that explicitly exposes
15+
* queryFn and other properties for direct TypeScript access.
1416
*/
15-
export type DefinedInitialDataOptions<
17+
export type UndefinedInitialDataOptions<
1618
TQueryFnData = unknown,
1719
TError = DefaultError,
1820
TData = TQueryFnData,
1921
TQueryKey extends QueryKey = QueryKey,
20-
> = QueryObserverOptions<
21-
TQueryFnData,
22-
TError,
23-
TData,
24-
TQueryFnData,
25-
DeepUnwrapRef<TQueryKey>
26-
> &
27-
ShallowOption & {
28-
initialData:
29-
| NonUndefinedGuard<TQueryFnData>
30-
| (() => NonUndefinedGuard<TQueryFnData>)
31-
}
22+
> = UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
23+
queryKey: TQueryKey
24+
queryFn?: QueryFunction<TQueryFnData, DeepUnwrapRef<TQueryKey>>
25+
}
3226

3327
/**
34-
* Options for queryOptions with undefined initial data.
35-
* These are unwrapped types (not MaybeRef) so that properties like queryFn are directly accessible.
28+
* Augmented version of DefinedInitialQueryOptions that explicitly exposes
29+
* queryFn and other properties for direct TypeScript access.
3630
*/
37-
export type UndefinedInitialDataOptions<
31+
export type DefinedInitialDataOptions<
3832
TQueryFnData = unknown,
3933
TError = DefaultError,
4034
TData = TQueryFnData,
4135
TQueryKey extends QueryKey = QueryKey,
42-
> = QueryObserverOptions<
43-
TQueryFnData,
44-
TError,
45-
TData,
46-
TQueryFnData,
47-
DeepUnwrapRef<TQueryKey>
48-
> &
49-
ShallowOption & {
50-
initialData?:
51-
| undefined
52-
| InitialDataFunction<NonUndefinedGuard<TQueryFnData>>
53-
| NonUndefinedGuard<TQueryFnData>
54-
}
36+
> = DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
37+
queryKey: TQueryKey
38+
queryFn?: QueryFunction<TQueryFnData, DeepUnwrapRef<TQueryKey>>
39+
}
5540

5641
export function queryOptions<
5742
TQueryFnData = unknown,

0 commit comments

Comments
 (0)