Skip to content

Commit dab6c6c

Browse files
feat: initialData type narrowing (#240)
1 parent d0bb50b commit dab6c6c

File tree

3 files changed

+103
-11
lines changed

3 files changed

+103
-11
lines changed

package-lock.json

+7-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"homepage": "https://github.com/DamianOsipiuk/vue-query#readme",
4747
"dependencies": {
4848
"@vue/devtools-api": "^6.2.1",
49-
"@tanstack/query-core": "^4.0.5",
49+
"@tanstack/query-core": "^4.2.3",
5050
"match-sorter": "^6.3.1",
5151
"vue-demi": "^0.13.5"
5252
},

src/vuejs/useQuery.ts

+95-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import type { UnwrapRef } from "vue-demi";
1+
import type { ToRefs, UnwrapRef } from "vue-demi";
22
import { QueryObserver } from "@tanstack/query-core";
33
import type {
44
QueryFunction,
55
QueryKey,
66
QueryObserverResult,
7+
DefinedQueryObserverResult,
78
} from "@tanstack/query-core";
89
import { useBaseQuery, UseQueryReturnType as UQRT } from "./useBaseQuery";
910
import type { WithQueryClientKey, VueQueryObserverOptions } from "./types";
@@ -16,6 +17,15 @@ type UseQueryReturnType<TData, TError> = Omit<
1617
remove: QueryObserverResult<TData, TError>["remove"];
1718
};
1819

20+
type UseQueryDefinedReturnType<TData, TError> = Omit<
21+
ToRefs<Readonly<DefinedQueryObserverResult<TData, TError>>>,
22+
"refetch" | "remove"
23+
> & {
24+
suspense: () => Promise<QueryObserverResult<TData, TError>>;
25+
refetch: QueryObserverResult<TData, TError>["refetch"];
26+
remove: QueryObserverResult<TData, TError>["remove"];
27+
};
28+
1929
export type UseQueryOptions<
2030
TQueryFnData = unknown,
2131
TError = unknown,
@@ -25,6 +35,30 @@ export type UseQueryOptions<
2535
VueQueryObserverOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
2636
>;
2737

38+
export function useQuery<
39+
TQueryFnData = unknown,
40+
TError = unknown,
41+
TData = TQueryFnData,
42+
TQueryKey extends QueryKey = QueryKey
43+
>(
44+
options: Omit<
45+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
46+
"initialData"
47+
> & { initialData?: () => undefined }
48+
): UseQueryReturnType<TData, TError>;
49+
50+
export function useQuery<
51+
TQueryFnData = unknown,
52+
TError = unknown,
53+
TData = TQueryFnData,
54+
TQueryKey extends QueryKey = QueryKey
55+
>(
56+
options: Omit<
57+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
58+
"initialData"
59+
> & { initialData: TQueryFnData | (() => TQueryFnData) }
60+
): UseQueryDefinedReturnType<TData, TError>;
61+
2862
export function useQuery<
2963
TQueryFnData = unknown,
3064
TError = unknown,
@@ -33,6 +67,33 @@ export function useQuery<
3367
>(
3468
options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
3569
): UseQueryReturnType<TData, TError>;
70+
71+
export function useQuery<
72+
TQueryFnData = unknown,
73+
TError = unknown,
74+
TData = TQueryFnData,
75+
TQueryKey extends QueryKey = QueryKey
76+
>(
77+
queryKey: TQueryKey,
78+
options?: Omit<
79+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
80+
"queryKey" | "initialData"
81+
> & { initialData?: () => undefined }
82+
): UseQueryReturnType<TData, TError>;
83+
84+
export function useQuery<
85+
TQueryFnData = unknown,
86+
TError = unknown,
87+
TData = TQueryFnData,
88+
TQueryKey extends QueryKey = QueryKey
89+
>(
90+
queryKey: TQueryKey,
91+
options?: Omit<
92+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
93+
"queryKey" | "initialData"
94+
> & { initialData: TQueryFnData | (() => TQueryFnData) }
95+
): UseQueryDefinedReturnType<TData, TError>;
96+
3697
export function useQuery<
3798
TQueryFnData = unknown,
3899
TError = unknown,
@@ -45,14 +106,43 @@ export function useQuery<
45106
"queryKey"
46107
>
47108
): UseQueryReturnType<TData, TError>;
109+
110+
export function useQuery<
111+
TQueryFnData = unknown,
112+
TError = unknown,
113+
TData = TQueryFnData,
114+
TQueryKey extends QueryKey = QueryKey
115+
>(
116+
queryKey: TQueryKey,
117+
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
118+
options?: Omit<
119+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
120+
"queryKey" | "queryFn" | "initialData"
121+
> & { initialData?: () => undefined }
122+
): UseQueryReturnType<TData, TError>;
123+
124+
export function useQuery<
125+
TQueryFnData = unknown,
126+
TError = unknown,
127+
TData = TQueryFnData,
128+
TQueryKey extends QueryKey = QueryKey
129+
>(
130+
queryKey: TQueryKey,
131+
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
132+
options?: Omit<
133+
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
134+
"queryKey" | "queryFn" | "initialData"
135+
> & { initialData: TQueryFnData | (() => TQueryFnData) }
136+
): UseQueryDefinedReturnType<TData, TError>;
137+
48138
export function useQuery<
49139
TQueryFnData = unknown,
50140
TError = unknown,
51141
TData = TQueryFnData,
52142
TQueryKey extends QueryKey = QueryKey
53143
>(
54144
queryKey: TQueryKey,
55-
queryFn: QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>,
145+
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
56146
options?: Omit<
57147
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
58148
"queryKey" | "queryFn"
@@ -70,7 +160,9 @@ export function useQuery<
70160
| QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>
71161
| UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
72162
arg3?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>
73-
): UseQueryReturnType<TData, TError> {
163+
):
164+
| UseQueryReturnType<TData, TError>
165+
| UseQueryDefinedReturnType<TData, TError> {
74166
const result = useBaseQuery(QueryObserver, arg1, arg2, arg3);
75167

76168
return {

0 commit comments

Comments
 (0)