Skip to content

Commit 9813a39

Browse files
authored
fix(react-query): throw type error when skipToken is present in prefetch query (#9321)
1 parent b5a9095 commit 9813a39

File tree

3 files changed

+37
-8
lines changed

3 files changed

+37
-8
lines changed

‎packages/react-query/src/__tests__/usePrefetchQuery.test-d.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { assertType, describe, expectTypeOf, it } from 'vitest'
2-
import { usePrefetchQuery } from '..'
2+
import { skipToken, usePrefetchQuery } from '..'
33

44
describe('usePrefetchQuery', () => {
55
it('should return nothing', () => {
@@ -39,4 +39,21 @@ describe('usePrefetchQuery', () => {
3939
}),
4040
)
4141
})
42+
43+
it('should not allow skipToken in queryFn', () => {
44+
assertType(
45+
usePrefetchQuery({
46+
queryKey: ['key'],
47+
// @ts-expect-error
48+
queryFn: skipToken,
49+
}),
50+
)
51+
assertType(
52+
usePrefetchQuery({
53+
queryKey: ['key'],
54+
// @ts-expect-error
55+
queryFn: Math.random() > 0.5 ? skipToken : () => Promise.resolve(5),
56+
}),
57+
)
58+
})
4259
})

‎packages/react-query/src/types.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type {
55
DefinedInfiniteQueryObserverResult,
66
DefinedQueryObserverResult,
77
DistributiveOmit,
8+
FetchQueryOptions,
89
InfiniteQueryObserverOptions,
910
InfiniteQueryObserverResult,
1011
MutateFunction,
@@ -45,6 +46,21 @@ export interface UseBaseQueryOptions<
4546
subscribed?: boolean
4647
}
4748

49+
export interface UsePrefetchQueryOptions<
50+
TQueryFnData = unknown,
51+
TError = DefaultError,
52+
TData = TQueryFnData,
53+
TQueryKey extends QueryKey = QueryKey,
54+
> extends OmitKeyof<
55+
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
56+
'queryFn'
57+
> {
58+
queryFn?: Exclude<
59+
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'],
60+
SkipToken
61+
>
62+
}
63+
4864
export type AnyUseQueryOptions = UseQueryOptions<any, any, any, any>
4965
export interface UseQueryOptions<
5066
TQueryFnData = unknown,

‎packages/react-query/src/usePrefetchQuery.tsx

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
import { useQueryClient } from './QueryClientProvider'
2-
import type {
3-
DefaultError,
4-
FetchQueryOptions,
5-
QueryClient,
6-
QueryKey,
7-
} from '@tanstack/query-core'
2+
import type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core'
3+
import type { UsePrefetchQueryOptions } from './types'
84

95
export function usePrefetchQuery<
106
TQueryFnData = unknown,
117
TError = DefaultError,
128
TData = TQueryFnData,
139
TQueryKey extends QueryKey = QueryKey,
1410
>(
15-
options: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
11+
options: UsePrefetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
1612
queryClient?: QueryClient,
1713
) {
1814
const client = useQueryClient(queryClient)

0 commit comments

Comments
 (0)