Skip to content

Commit 6f1dfc6

Browse files
committed
fix: type TData with initialData is undefined
1 parent ba16dc2 commit 6f1dfc6

4 files changed

Lines changed: 71 additions & 12 deletions

File tree

.eslintrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"@typescript-eslint/no-non-null-assertion": "off",
4040
"import/no-unresolved": ["error", { "commonjs": true, "amd": true }],
4141
"import/export": "error",
42+
"@typescript-eslint/ban-types": "off",
4243
"@typescript-eslint/no-duplicate-imports": ["error"],
4344
"@typescript-eslint/explicit-module-boundary-types": "off",
4445
"@typescript-eslint/no-unused-vars": [

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"@rollup/plugin-commonjs": "^22.0.2",
2828
"@rollup/plugin-node-resolve": "^13.2.1",
2929
"@rollup/plugin-replace": "^4.0.0",
30-
"@tanstack/react-query": "^5.0.0-beta.20",
30+
"@tanstack/react-query": "^5.0.0-rc.12",
3131
"@testing-library/jest-dom": "^5.16.5",
3232
"@testing-library/react": "^14.0.0",
3333
"@trivago/prettier-plugin-sort-imports": "^4.2.0",

src/types.ts

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type {
2+
DefinedUseQueryResult,
23
GetNextPageParamFunction,
34
GetPreviousPageParamFunction,
45
InfiniteData,
@@ -78,6 +79,17 @@ type CompatibleUseInfiniteQueryOptions<
7879
>
7980
>
8081

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+
8193
export type inferQueryKey<TVariables> = TVariables extends void
8294
? [string]
8395
: [string, TVariables]
@@ -168,10 +180,26 @@ export interface QueryHookOptions<TFnData, TError, TData, TVariables>
168180
variables?: TVariables
169181
}
170182

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+
171190
export type QueryHookResult<TData, TError> = UseQueryResult<TData, TError>
172191

192+
export type DefinedQueryHookResult<TData, TError> = DefinedUseQueryResult<
193+
TData,
194+
TError
195+
>
196+
173197
export interface QueryHook<TFnData = unknown, TVariables = any, TError = Error>
174198
extends ExposeMethods<TFnData, TVariables> {
199+
<TData = TFnData>(
200+
options: DefinedQueryHookOptions<TFnData, TError, TData, TVariables>,
201+
queryClient?: CompatibleWithV4<QueryClient, void>
202+
): DefinedQueryHookResult<TData, TError>
175203
<TData = TFnData>(
176204
options?: QueryHookOptions<TFnData, TError, TData, TVariables>,
177205
queryClient?: CompatibleWithV4<QueryClient, void>
@@ -279,17 +307,47 @@ export interface InfiniteQueryHookOptions<
279307
variables?: TVariables
280308
}
281309

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+
282325
export type InfiniteQueryHookResult<TData, TError> = UseInfiniteQueryResult<
283326
TData,
284327
TError
285328
>
286329

330+
export type DefinedInfiniteQueryHookResult<TData, TError> = WithRequired<
331+
UseInfiniteQueryResult<TData, TError>,
332+
'data'
333+
>
334+
287335
export interface InfiniteQueryHook<
288336
TFnData = unknown,
289337
TVariables = void,
290338
TError = Error,
291339
TPageParam = number
292340
> 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>
293351
<TData = CompatibleWithV4<InfiniteData<TFnData, TPageParam>, TFnData>>(
294352
options?: InfiniteQueryHookOptions<
295353
TFnData,
@@ -444,9 +502,9 @@ export type inferData<T> = T extends QueryHook<infer TData, any, any>
444502
: T extends SuspenseQueryHook<infer TData, any, any>
445503
? TData
446504
: T extends InfiniteQueryHook<infer TData, any, any, infer TPageParam>
447-
? CompatibleWithV4<InfiniteData<TData, TPageParam>, InfiniteData<TData>>
505+
? CompatibleInfiniteData<TData, TPageParam>
448506
: T extends SuspenseInfiniteQueryHook<infer TData, any, any, infer TPageParam>
449-
? CompatibleWithV4<InfiniteData<TData, TPageParam>, InfiniteData<TData>>
507+
? CompatibleInfiniteData<TData, TPageParam>
450508
: T extends MutationHook<infer TData, any, any>
451509
? TData
452510
: never

yarn.lock

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1676,17 +1676,17 @@
16761676
dependencies:
16771677
"@sinonjs/commons" "^3.0.0"
16781678

1679-
"@tanstack/query-core@5.0.0-beta.20":
1680-
version "5.0.0-beta.20"
1681-
resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.0.0-beta.20.tgz#0aad6d63ea7b407cf886117932b4ea5eb963701b"
1682-
integrity sha512-KTI6b4DLXq39n/VNLvWqxM0K/bmCyL5SvOfPGZ1cZGOvVfZxpo/81ZF9cuRDyPjInmzz8d8jUZOHZVJDKSDcvQ==
1679+
"@tanstack/query-core@5.0.0-rc.12":
1680+
version "5.0.0-rc.12"
1681+
resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.0.0-rc.12.tgz#0748043960b749888d6762bf6ed795ca7d761153"
1682+
integrity sha512-gEgRIkFMjxhu+rbomSxAYTA+aPaPrLffJwFCpfd/AqJ8PTlnredJnFfFskCbR6oZo/1XEuDORFW9c6b4gOnEKQ==
16831683

1684-
"@tanstack/react-query@^5.0.0-beta.20":
1685-
version "5.0.0-beta.20"
1686-
resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.0.0-beta.20.tgz#d3828f9774b62f7b7e3be9da2917fe59d8488960"
1687-
integrity sha512-L5YP1zwEMBwZJ/oCnFXLnb6S60srU7Oyj/oM5TVLcC/efdKpcdToMZTHA9Vjq3oFA9ysxFgrskkideIMa3fB4A==
1684+
"@tanstack/react-query@^5.0.0-rc.12":
1685+
version "5.0.0-rc.12"
1686+
resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.0.0-rc.12.tgz#26c61cff5c33c1be1033795de56f57eb7bb8d19a"
1687+
integrity sha512-pUb6xkHs2YFb9N6/34ZMut4LG0yO+uqjDaoWmxOsmIZVwPYCNrsRjI8kaF/6F+5gyxJp6hzFHH4Jlukbx/tReA==
16881688
dependencies:
1689-
"@tanstack/query-core" "5.0.0-beta.20"
1689+
"@tanstack/query-core" "5.0.0-rc.12"
16901690
client-only "0.0.1"
16911691

16921692
"@testing-library/dom@^9.0.0":

0 commit comments

Comments
 (0)