diff --git a/packages/react-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx b/packages/react-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx index 45321ce16a..6802f60bb7 100644 --- a/packages/react-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx +++ b/packages/react-query-persist-client/src/__tests__/PersistQueryClientProvider.test.tsx @@ -6,6 +6,7 @@ import { useQuery, UseQueryResult, useQueries, + DefinedUseQueryResult, } from '@tanstack/react-query' import { createQueryClient, @@ -200,7 +201,7 @@ describe('PersistQueryClientProvider', () => { test('should show initialData while restoring', async () => { const key = queryKey() - const states: UseQueryResult[] = [] + const states: DefinedUseQueryResult[] = [] const queryClient = createQueryClient() await queryClient.prefetchQuery(key, () => Promise.resolve('hydrated')) diff --git a/packages/react-query/src/__tests__/useQuery.test.tsx b/packages/react-query/src/__tests__/useQuery.test.tsx index 88c994eb39..37ab64707a 100644 --- a/packages/react-query/src/__tests__/useQuery.test.tsx +++ b/packages/react-query/src/__tests__/useQuery.test.tsx @@ -19,6 +19,7 @@ import { QueryFunction, QueryFunctionContext, UseQueryOptions, + DefinedUseQueryResult, } from '..' import { ErrorBoundary } from 'react-error-boundary' @@ -142,7 +143,7 @@ describe('useQuery', () => { ) => Promise, options?: Omit< UseQueryOptions, - 'queryKey' | 'queryFn' + 'queryKey' | 'queryFn' | 'initialData' >, ) => useQuery(qk, () => fetcher(qk[1], 'token'), options) const test = useWrappedQuery([''], async () => '1') @@ -159,7 +160,7 @@ describe('useQuery', () => { fetcher: () => Promise, options?: Omit< UseQueryOptions, - 'queryKey' | 'queryFn' + 'queryKey' | 'queryFn' | 'initialData' >, ) => useQuery(qk, fetcher, options) const testFuncStyle = useWrappedFuncStyleQuery([''], async () => true) @@ -1295,7 +1296,7 @@ describe('useQuery', () => { it('should use query function from hook when the existing query does not have a query function', async () => { const key = queryKey() - const results: UseQueryResult[] = [] + const results: DefinedUseQueryResult[] = [] queryClient.setQueryData(key, 'set') @@ -1712,7 +1713,7 @@ describe('useQuery', () => { it('should not show initial data from next query if keepPreviousData is set', async () => { const key = queryKey() - const states: UseQueryResult[] = [] + const states: DefinedUseQueryResult[] = [] function Page() { const [count, setCount] = React.useState(0) @@ -3025,7 +3026,7 @@ describe('useQuery', () => { it('should fetch if initial data is set', async () => { const key = queryKey() - const states: UseQueryResult[] = [] + const states: DefinedUseQueryResult[] = [] function Page() { const state = useQuery(key, () => 'data', { @@ -3055,7 +3056,7 @@ describe('useQuery', () => { it('should not fetch if initial data is set with a stale time', async () => { const key = queryKey() - const states: UseQueryResult[] = [] + const states: DefinedUseQueryResult[] = [] function Page() { const state = useQuery(key, () => 'data', { @@ -3085,7 +3086,7 @@ describe('useQuery', () => { it('should fetch if initial data updated at is older than stale time', async () => { const key = queryKey() - const states: UseQueryResult[] = [] + const states: DefinedUseQueryResult[] = [] const oneSecondAgo = Date.now() - 1000 @@ -3123,7 +3124,7 @@ describe('useQuery', () => { it('should fetch if "initial data updated at" is exactly 0', async () => { const key = queryKey() - const states: UseQueryResult[] = [] + const states: DefinedUseQueryResult[] = [] function Page() { const state = useQuery(key, () => 'data', { @@ -3154,7 +3155,7 @@ describe('useQuery', () => { it('should keep initial data when the query key changes', async () => { const key = queryKey() - const states: UseQueryResult<{ count: number }>[] = [] + const states: DefinedUseQueryResult<{ count: number }>[] = [] function Page() { const [count, setCount] = React.useState(0) @@ -3629,7 +3630,7 @@ describe('useQuery', () => { it('should mark query as fetching, when using initialData', async () => { const key = queryKey() - const results: UseQueryResult[] = [] + const results: DefinedUseQueryResult[] = [] function Page() { const result = useQuery(key, () => 'serverData', { initialData: 'data' }) @@ -3648,7 +3649,7 @@ describe('useQuery', () => { it('should initialize state properly, when initialData is falsy', async () => { const key = queryKey() - const results: UseQueryResult[] = [] + const results: DefinedUseQueryResult[] = [] function Page() { const result = useQuery(key, () => 1, { initialData: 0 }) @@ -3668,7 +3669,7 @@ describe('useQuery', () => { // // See https://github.com/tannerlinsley/react-query/issues/214 it('data should persist when enabled is changed to false', async () => { const key = queryKey() - const results: UseQueryResult[] = [] + const results: DefinedUseQueryResult[] = [] function Page() { const [shouldFetch, setShouldFetch] = React.useState(true) diff --git a/packages/react-query/src/__tests__/useQuery.types.test.tsx b/packages/react-query/src/__tests__/useQuery.types.test.tsx index 2861e45f7d..d049b53e00 100644 --- a/packages/react-query/src/__tests__/useQuery.types.test.tsx +++ b/packages/react-query/src/__tests__/useQuery.types.test.tsx @@ -8,9 +8,9 @@ export type Equal = (() => T extends X ? 1 : 2) extends < export type Expect = T -const doNotExecute = (_func: () => void) => {} +const doNotExecute = (_func: () => void) => true -describe('useQuery', () => { +describe('initialData', () => { describe('Config object overload', () => { it('TData should always be defined when initialData is provided as an object', () => { doNotExecute(() => { diff --git a/packages/react-query/src/types.ts b/packages/react-query/src/types.ts index 20b8817cb1..c83bb5b26a 100644 --- a/packages/react-query/src/types.ts +++ b/packages/react-query/src/types.ts @@ -65,6 +65,11 @@ export type UseQueryResult< TError = unknown, > = UseBaseQueryResult +export type DefinedUseQueryResult = Omit< + UseQueryResult, + 'data' +> & { data: TData } + export type UseInfiniteQueryResult< TData = unknown, TError = unknown, diff --git a/packages/react-query/src/useQuery.ts b/packages/react-query/src/useQuery.ts index 02504a9026..1fb99c4d24 100644 --- a/packages/react-query/src/useQuery.ts +++ b/packages/react-query/src/useQuery.ts @@ -4,7 +4,7 @@ import { QueryKey, QueryObserver, } from '@tanstack/query-core' -import { UseQueryOptions, UseQueryResult } from './types' +import { DefinedUseQueryResult, UseQueryOptions, UseQueryResult } from './types' import { useBaseQuery } from './useBaseQuery' // HOOK @@ -31,7 +31,7 @@ export function useQuery< UseQueryOptions, 'initialData' > & { initialData: TData | (() => TData) }, -): Omit, 'data'> & { data: TData } +): DefinedUseQueryResult export function useQuery< TQueryFnData = unknown, @@ -57,7 +57,7 @@ export function useQuery< UseQueryOptions, 'queryKey' | 'initialData' > & { initialData: TData | (() => TData) }, -): Omit, 'data'> & { data: TData } +): DefinedUseQueryResult export function useQuery< TQueryFnData = unknown, @@ -85,7 +85,7 @@ export function useQuery< UseQueryOptions, 'queryKey' | 'queryFn' | 'initialData' > & { initialData: TData | (() => TData) }, -): Omit, 'data'> & { data: TData } +): DefinedUseQueryResult export function useQuery< TQueryFnData,