Skip to content

Commit 300a6d4

Browse files
upd(vue-query): Improve queryOptions() type
1 parent ecdf962 commit 300a6d4

File tree

2 files changed

+120
-41
lines changed

2 files changed

+120
-41
lines changed
Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,51 @@
11
import type { DataTag, DefaultError, QueryKey } from '@tanstack/query-core'
22
import type {
33
DefinedInitialQueryOptions,
4+
DefinedInitialQueryOptionsBase,
5+
DefinedInitialQueryOptionsRef,
46
UndefinedInitialQueryOptions,
7+
UndefinedInitialQueryOptionsBase,
8+
UndefinedInitialQueryOptionsRef,
59
} from './useQuery'
610

711
export function queryOptions<
812
TQueryFnData = unknown,
913
TError = DefaultError,
1014
TData = TQueryFnData,
1115
TQueryKey extends QueryKey = QueryKey,
16+
TOptions = DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
17+
TReturnQueryKey = {
18+
queryKey: DataTag<TQueryKey, TQueryFnData, TError>
19+
},
1220
>(
13-
options: DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
14-
): DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
15-
queryKey: DataTag<TQueryKey, TQueryFnData, TError>
16-
}
21+
options: TOptions,
22+
): TOptions extends { value: unknown }
23+
? DefinedInitialQueryOptionsRef<TQueryFnData, TError, TData, TQueryKey> &
24+
TOptions
25+
: DefinedInitialQueryOptionsBase<TQueryFnData, TError, TData, TQueryKey> &
26+
TOptions
1727

1828
export function queryOptions<
1929
TQueryFnData = unknown,
2030
TError = DefaultError,
2131
TData = TQueryFnData,
2232
TQueryKey extends QueryKey = QueryKey,
33+
TOptions = UndefinedInitialQueryOptions<
34+
TQueryFnData,
35+
TError,
36+
TData,
37+
TQueryKey
38+
>
2339
>(
24-
options: UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
25-
): UndefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
26-
queryKey: DataTag<TQueryKey, TQueryFnData, TError>
27-
}
40+
options: TOptions,
41+
): TOptions extends { value: unknown }
42+
? UndefinedInitialQueryOptionsRef<TQueryFnData, TError, TData, TQueryKey> &
43+
TOptions
44+
: UndefinedInitialQueryOptionsBase<TQueryFnData, TError, TData, TQueryKey> &
45+
TOptions
2846

2947
export function queryOptions(options: unknown) {
3048
return options
3149
}
50+
51+

packages/vue-query/src/useQuery.ts

Lines changed: 92 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -18,65 +18,124 @@ import type {
1818
ShallowOption,
1919
} from './types'
2020
import type { QueryClient } from './queryClient'
21+
import { ComputedRef, Ref } from 'vue'
2122

22-
export type UseQueryOptions<
23+
export type UseQueryOptionsBase<
2324
TQueryFnData = unknown,
2425
TError = DefaultError,
2526
TData = TQueryFnData,
2627
TQueryData = TQueryFnData,
2728
TQueryKey extends QueryKey = QueryKey,
28-
> = MaybeRef<
29-
{
30-
[Property in keyof QueryObserverOptions<
29+
> = {
30+
[Property in keyof QueryObserverOptions<
31+
TQueryFnData,
32+
TError,
33+
TData,
34+
TQueryData,
35+
TQueryKey
36+
>]: Property extends 'enabled'
37+
?
38+
| MaybeRefOrGetter<boolean | undefined>
39+
| (() => Enabled<
40+
TQueryFnData,
41+
TError,
42+
TQueryData,
43+
DeepUnwrapRef<TQueryKey>
44+
>)
45+
: MaybeRefDeep<
46+
QueryObserverOptions<
3147
TQueryFnData,
3248
TError,
3349
TData,
3450
TQueryData,
35-
TQueryKey
36-
>]: Property extends 'enabled'
37-
?
38-
| MaybeRefOrGetter<boolean | undefined>
39-
| (() => Enabled<
40-
TQueryFnData,
41-
TError,
42-
TQueryData,
43-
DeepUnwrapRef<TQueryKey>
44-
>)
45-
: MaybeRefDeep<
46-
QueryObserverOptions<
47-
TQueryFnData,
48-
TError,
49-
TData,
50-
TQueryData,
51-
DeepUnwrapRef<TQueryKey>
52-
>[Property]
53-
>
54-
} & ShallowOption
55-
>
51+
DeepUnwrapRef<TQueryKey>
52+
>[Property]
53+
>
54+
} & ShallowOption
5655

57-
export type UndefinedInitialQueryOptions<
56+
export type UseQueryOptionsRef<
57+
TQueryFnData = unknown,
58+
TError = DefaultError,
59+
TData = TQueryFnData,
60+
TQueryData = TQueryFnData,
61+
TQueryKey extends QueryKey = QueryKey,
62+
> =
63+
| Ref<UseQueryOptionsBase<TQueryFnData, TError, TData, TQueryData, TQueryKey>>
64+
| ComputedRef<
65+
UseQueryOptionsBase<TQueryFnData, TError, TData, TQueryData, TQueryKey>
66+
>
67+
68+
export type UseQueryOptions<
69+
TQueryFnData = unknown,
70+
TError = DefaultError,
71+
TData = TQueryFnData,
72+
TQueryData = TQueryFnData,
73+
TQueryKey extends QueryKey = QueryKey,
74+
> =
75+
| UseQueryOptionsBase<TQueryFnData, TError, TData, TQueryData, TQueryKey>
76+
| UseQueryOptionsRef<TQueryFnData, TError, TData, TQueryData, TQueryKey>
77+
78+
export type UndefinedInitialQueryOptionsBase<
5879
TQueryFnData = unknown,
5980
TError = DefaultError,
6081
TData = TQueryFnData,
6182
TQueryKey extends QueryKey = QueryKey,
62-
> = UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> & {
83+
> = UseQueryOptionsBase<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> & {
6384
initialData?:
64-
| undefined
65-
| InitialDataFunction<NonUndefinedGuard<TQueryFnData>>
66-
| NonUndefinedGuard<TQueryFnData>
85+
| undefined
86+
| InitialDataFunction<NonUndefinedGuard<TQueryFnData>>
87+
| NonUndefinedGuard<TQueryFnData>
6788
}
6889

69-
export type DefinedInitialQueryOptions<
90+
export type UndefinedInitialQueryOptionsRef<
91+
TQueryFnData = unknown,
92+
TError = DefaultError,
93+
TData = TQueryFnData,
94+
TQueryKey extends QueryKey = QueryKey,
95+
> = UseQueryOptionsRef<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> & {
96+
initialData?:
97+
| undefined
98+
| InitialDataFunction<NonUndefinedGuard<TQueryFnData>>
99+
| NonUndefinedGuard<TQueryFnData>
100+
}
101+
102+
export type UndefinedInitialQueryOptions<
103+
TQueryFnData = unknown,
104+
TError = DefaultError,
105+
TData = TQueryFnData,
106+
TQueryKey extends QueryKey = QueryKey,
107+
> = UndefinedInitialQueryOptionsBase<TQueryFnData, TError, TData, TQueryKey> | UndefinedInitialQueryOptionsRef<TQueryFnData, TError, TData, TQueryKey>
108+
109+
export type DefinedInitialQueryOptionsBase<
70110
TQueryFnData = unknown,
71111
TError = DefaultError,
72112
TData = TQueryFnData,
73113
TQueryKey extends QueryKey = QueryKey,
74-
> = UseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> & {
114+
> = UseQueryOptionsBase<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> & {
75115
initialData:
76-
| NonUndefinedGuard<TQueryFnData>
116+
| NonUndefinedGuard<TQueryFnData>
117+
| (() => NonUndefinedGuard<TQueryFnData>)
118+
}
119+
120+
export type DefinedInitialQueryOptionsRef<
121+
TQueryFnData = unknown,
122+
TError = DefaultError,
123+
TData = TQueryFnData,
124+
TQueryKey extends QueryKey = QueryKey,
125+
> = UseQueryOptionsRef<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> & {
126+
value: UseQueryOptionsRef<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>['value'] & {
127+
initialData: NonUndefinedGuard<TQueryFnData>
77128
| (() => NonUndefinedGuard<TQueryFnData>)
129+
}
78130
}
79131

132+
export type DefinedInitialQueryOptions<
133+
TQueryFnData = unknown,
134+
TError = DefaultError,
135+
TData = TQueryFnData,
136+
TQueryKey extends QueryKey = QueryKey,
137+
> = DefinedInitialQueryOptionsBase<TQueryFnData, TError, TData, TQueryKey> | DefinedInitialQueryOptionsRef<TQueryFnData, TError, TData, TQueryKey>
138+
80139
export type UseQueryReturnType<TData, TError> = UseBaseQueryReturnType<
81140
TData,
82141
TError

0 commit comments

Comments
 (0)