From d24329e25b88fdc0a5b3b92d7d2ae1fa7585080f Mon Sep 17 00:00:00 2001 From: skiende74 Date: Sat, 22 Feb 2025 00:40:53 +0900 Subject: [PATCH 1/5] fix(react-query): fix no error on wrong type annotation --- .../src/__tests__/useQuery.test-d.tsx | 19 +++++++++++++++++-- packages/react-query/src/useQuery.ts | 8 +++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/packages/react-query/src/__tests__/useQuery.test-d.tsx b/packages/react-query/src/__tests__/useQuery.test-d.tsx index 505344d6e8..65a404ee48 100644 --- a/packages/react-query/src/__tests__/useQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useQuery.test-d.tsx @@ -1,8 +1,8 @@ -import { describe, expectTypeOf, it } from 'vitest' +import { assertType, describe, expectTypeOf, it } from 'vitest' import { useQuery } from '../useQuery' import { queryOptions } from '../queryOptions' import type { OmitKeyof } from '..' -import type { UseQueryOptions } from '../types' +import type { UseQueryOptions, UseQueryResult } from '../types' describe('initialData', () => { describe('Config object overload', () => { @@ -106,6 +106,21 @@ describe('initialData', () => { } }) + it('TData should depend from only arguments, not the result', () => { + // @ts-expect-error + const result: UseQueryResult<{ wow: string }> = useQuery({ + queryKey: ['key'], + queryFn: () => { + return { + wow: true, + } + }, + initialData: () => undefined as { wow: boolean } | undefined, + }) + + void result + }) + it('data should not have undefined when initialData is provided', () => { const { data } = useQuery({ queryKey: ['query-key'], diff --git a/packages/react-query/src/useQuery.ts b/packages/react-query/src/useQuery.ts index 962ef4da66..da152a6a7a 100644 --- a/packages/react-query/src/useQuery.ts +++ b/packages/react-query/src/useQuery.ts @@ -20,7 +20,7 @@ export function useQuery< >( options: DefinedInitialDataOptions, queryClient?: QueryClient, -): DefinedUseQueryResult +): DefinedUseQueryResult, TError> export function useQuery< TQueryFnData = unknown, @@ -30,7 +30,7 @@ export function useQuery< >( options: UndefinedInitialDataOptions, queryClient?: QueryClient, -): UseQueryResult +): UseQueryResult, TError> export function useQuery< TQueryFnData = unknown, @@ -40,8 +40,10 @@ export function useQuery< >( options: UseQueryOptions, queryClient?: QueryClient, -): UseQueryResult +): UseQueryResult, TError> export function useQuery(options: UseQueryOptions, queryClient?: QueryClient) { return useBaseQuery(options, QueryObserver, queryClient) } + +type NoInfer = [T][T extends any ? 0 : never] From e6a6c1ef1cb8d62f254a379c7ebcf3e16aa443c1 Mon Sep 17 00:00:00 2001 From: skiende74 Date: Sat, 22 Feb 2025 02:26:27 +0900 Subject: [PATCH 2/5] test(react-query): remove an unused var --- packages/react-query/src/__tests__/useQuery.test-d.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-query/src/__tests__/useQuery.test-d.tsx b/packages/react-query/src/__tests__/useQuery.test-d.tsx index 65a404ee48..1eb89d8a16 100644 --- a/packages/react-query/src/__tests__/useQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useQuery.test-d.tsx @@ -1,4 +1,4 @@ -import { assertType, describe, expectTypeOf, it } from 'vitest' +import { describe, expectTypeOf, it } from 'vitest' import { useQuery } from '../useQuery' import { queryOptions } from '../queryOptions' import type { OmitKeyof } from '..' From 0f6ab22614832c962d7441525b92c731f7260452 Mon Sep 17 00:00:00 2001 From: skiende74 Date: Wed, 7 May 2025 02:59:47 +0900 Subject: [PATCH 3/5] feat: use NoInfer from query-core --- packages/react-query/src/useQuery.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/react-query/src/useQuery.ts b/packages/react-query/src/useQuery.ts index da152a6a7a..52d479551d 100644 --- a/packages/react-query/src/useQuery.ts +++ b/packages/react-query/src/useQuery.ts @@ -1,7 +1,12 @@ 'use client' import { QueryObserver } from '@tanstack/query-core' import { useBaseQuery } from './useBaseQuery' -import type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core' +import type { + DefaultError, + NoInfer, + QueryClient, + QueryKey, +} from '@tanstack/query-core' import type { DefinedUseQueryResult, UseQueryOptions, @@ -45,5 +50,3 @@ export function useQuery< export function useQuery(options: UseQueryOptions, queryClient?: QueryClient) { return useBaseQuery(options, QueryObserver, queryClient) } - -type NoInfer = [T][T extends any ? 0 : never] From 0193f5d92af00130ec8d98bf182878e7340d10bc Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 19:15:46 +0000 Subject: [PATCH 4/5] ci: apply automated fixes --- .../src/__tests__/useQuery.test-d.tsx | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/react-query/src/__tests__/useQuery.test-d.tsx b/packages/react-query/src/__tests__/useQuery.test-d.tsx index 5659cc9cd0..60bb3c9b63 100644 --- a/packages/react-query/src/__tests__/useQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useQuery.test-d.tsx @@ -272,25 +272,25 @@ describe('useQuery', () => { initialData: () => undefined as { wow: boolean } | undefined, }) - if (isSuccess) { - expectTypeOf(data).toEqualTypeOf<{ wow: boolean }>() - } - }) - - it('TData should depend from only arguments, not the result', () => { - // @ts-expect-error - const result: UseQueryResult<{ wow: string }> = useQuery({ - queryKey: ['key'], - queryFn: () => { - return { - wow: true, - } - }, - initialData: () => undefined as { wow: boolean } | undefined, + if (isSuccess) { + expectTypeOf(data).toEqualTypeOf<{ wow: boolean }>() + } }) - void result - }) + it('TData should depend from only arguments, not the result', () => { + // @ts-expect-error + const result: UseQueryResult<{ wow: string }> = useQuery({ + queryKey: ['key'], + queryFn: () => { + return { + wow: true, + } + }, + initialData: () => undefined as { wow: boolean } | undefined, + }) + + void result + }) it('data should not have undefined when initialData is provided', () => { const { data } = useQuery({ From 41138af93793b53fe76c16ef84e8cefcfde64cfb Mon Sep 17 00:00:00 2001 From: skiende74 Date: Wed, 7 May 2025 05:39:05 +0900 Subject: [PATCH 5/5] fix: fix eslint error (disable) --- packages/react-query/src/__tests__/useQuery.test-d.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-query/src/__tests__/useQuery.test-d.tsx b/packages/react-query/src/__tests__/useQuery.test-d.tsx index 60bb3c9b63..b59e7f295d 100644 --- a/packages/react-query/src/__tests__/useQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useQuery.test-d.tsx @@ -277,6 +277,7 @@ describe('useQuery', () => { } }) + // eslint-disable-next-line vitest/expect-expect it('TData should depend from only arguments, not the result', () => { // @ts-expect-error const result: UseQueryResult<{ wow: string }> = useQuery({