|
1 | 1 | import type { |
| 2 | + DefinedUseQueryResult, |
2 | 3 | GetNextPageParamFunction, |
3 | 4 | GetPreviousPageParamFunction, |
4 | 5 | InfiniteData, |
@@ -78,6 +79,17 @@ type CompatibleUseInfiniteQueryOptions< |
78 | 79 | > |
79 | 80 | > |
80 | 81 |
|
| 82 | +type CompatibleInfiniteData<TFnData, TPageParam> = CompatibleWithV4< |
| 83 | + InfiniteData<TFnData, TPageParam>, |
| 84 | + InfiniteData<TFnData> |
| 85 | +> |
| 86 | + |
| 87 | +type NonUndefinedGuard<T> = T extends undefined ? never : T |
| 88 | + |
| 89 | +type WithRequired<T, K extends keyof T> = T & { |
| 90 | + [_ in K]: {} |
| 91 | +} |
| 92 | + |
81 | 93 | export type inferQueryKey<TVariables> = TVariables extends void |
82 | 94 | ? [string] |
83 | 95 | : [string, TVariables] |
@@ -168,10 +180,26 @@ export interface QueryHookOptions<TFnData, TError, TData, TVariables> |
168 | 180 | variables?: TVariables |
169 | 181 | } |
170 | 182 |
|
| 183 | +export type DefinedQueryHookOptions<TFnData, TError, TData, TVariables> = Omit< |
| 184 | + QueryHookOptions<TFnData, TError, TData, TVariables>, |
| 185 | + 'initialData' |
| 186 | +> & { |
| 187 | + initialData: NonUndefinedGuard<TFnData> | (() => NonUndefinedGuard<TFnData>) |
| 188 | +} |
| 189 | + |
171 | 190 | export type QueryHookResult<TData, TError> = UseQueryResult<TData, TError> |
172 | 191 |
|
| 192 | +export type DefinedQueryHookResult<TData, TError> = DefinedUseQueryResult< |
| 193 | + TData, |
| 194 | + TError |
| 195 | +> |
| 196 | + |
173 | 197 | export interface QueryHook<TFnData = unknown, TVariables = any, TError = Error> |
174 | 198 | extends ExposeMethods<TFnData, TVariables> { |
| 199 | + <TData = TFnData>( |
| 200 | + options: DefinedQueryHookOptions<TFnData, TError, TData, TVariables>, |
| 201 | + queryClient?: CompatibleWithV4<QueryClient, void> |
| 202 | + ): DefinedQueryHookResult<TData, TError> |
175 | 203 | <TData = TFnData>( |
176 | 204 | options?: QueryHookOptions<TFnData, TError, TData, TVariables>, |
177 | 205 | queryClient?: CompatibleWithV4<QueryClient, void> |
@@ -279,17 +307,47 @@ export interface InfiniteQueryHookOptions< |
279 | 307 | variables?: TVariables |
280 | 308 | } |
281 | 309 |
|
| 310 | +export type DefinedInfiniteQueryHookOptions< |
| 311 | + TFnData, |
| 312 | + TError, |
| 313 | + TData, |
| 314 | + TVariables, |
| 315 | + TPageParam = number |
| 316 | +> = Omit< |
| 317 | + InfiniteQueryHookOptions<TFnData, TError, TData, TVariables, TPageParam>, |
| 318 | + 'initialData' |
| 319 | +> & { |
| 320 | + initialData: |
| 321 | + | CompatibleInfiniteData<TFnData, TPageParam> |
| 322 | + | (() => NonUndefinedGuard<CompatibleInfiniteData<TFnData, TPageParam>>) |
| 323 | +} |
| 324 | + |
282 | 325 | export type InfiniteQueryHookResult<TData, TError> = UseInfiniteQueryResult< |
283 | 326 | TData, |
284 | 327 | TError |
285 | 328 | > |
286 | 329 |
|
| 330 | +export type DefinedInfiniteQueryHookResult<TData, TError> = WithRequired< |
| 331 | + UseInfiniteQueryResult<TData, TError>, |
| 332 | + 'data' |
| 333 | +> |
| 334 | + |
287 | 335 | export interface InfiniteQueryHook< |
288 | 336 | TFnData = unknown, |
289 | 337 | TVariables = void, |
290 | 338 | TError = Error, |
291 | 339 | TPageParam = number |
292 | 340 | > extends ExposeMethods<TFnData, TVariables, TPageParam> { |
| 341 | + <TData = CompatibleWithV4<InfiniteData<TFnData, TPageParam>, TFnData>>( |
| 342 | + options: DefinedInfiniteQueryHookOptions< |
| 343 | + TFnData, |
| 344 | + TError, |
| 345 | + TData, |
| 346 | + TVariables, |
| 347 | + TPageParam |
| 348 | + >, |
| 349 | + queryClient?: CompatibleWithV4<QueryClient, void> |
| 350 | + ): DefinedInfiniteQueryHookResult<TData, TError> |
293 | 351 | <TData = CompatibleWithV4<InfiniteData<TFnData, TPageParam>, TFnData>>( |
294 | 352 | options?: InfiniteQueryHookOptions< |
295 | 353 | TFnData, |
@@ -444,9 +502,9 @@ export type inferData<T> = T extends QueryHook<infer TData, any, any> |
444 | 502 | : T extends SuspenseQueryHook<infer TData, any, any> |
445 | 503 | ? TData |
446 | 504 | : T extends InfiniteQueryHook<infer TData, any, any, infer TPageParam> |
447 | | - ? CompatibleWithV4<InfiniteData<TData, TPageParam>, InfiniteData<TData>> |
| 505 | + ? CompatibleInfiniteData<TData, TPageParam> |
448 | 506 | : T extends SuspenseInfiniteQueryHook<infer TData, any, any, infer TPageParam> |
449 | | - ? CompatibleWithV4<InfiniteData<TData, TPageParam>, InfiniteData<TData>> |
| 507 | + ? CompatibleInfiniteData<TData, TPageParam> |
450 | 508 | : T extends MutationHook<infer TData, any, any> |
451 | 509 | ? TData |
452 | 510 | : never |
|
0 commit comments