diff --git a/packages/angular-query-experimental/src/inject-queries.ts b/packages/angular-query-experimental/src/inject-queries.ts index 7664e9148c..49ff7a5628 100644 --- a/packages/angular-query-experimental/src/inject-queries.ts +++ b/packages/angular-query-experimental/src/inject-queries.ts @@ -5,6 +5,7 @@ import { injectQueryClient } from './inject-query-client' import type { Injector, Signal } from '@angular/core' import type { DefaultError, + OmitKeyof, QueriesObserverOptions, QueriesPlaceholderDataFunction, QueryFunction, @@ -22,7 +23,7 @@ type QueryObserverOptionsForCreateQueries< TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> = Omit< +> = OmitKeyof< QueryObserverOptions, 'placeholderData' > & { diff --git a/packages/angular-query-experimental/src/types.ts b/packages/angular-query-experimental/src/types.ts index 67038fe1f0..7f29d7dafe 100644 --- a/packages/angular-query-experimental/src/types.ts +++ b/packages/angular-query-experimental/src/types.ts @@ -9,6 +9,7 @@ import type { MutateFunction, MutationObserverOptions, MutationObserverResult, + OmitKeyof, QueryKey, QueryObserverOptions, QueryObserverResult, @@ -34,7 +35,7 @@ export interface CreateQueryOptions< TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> extends Omit< +> extends OmitKeyof< CreateBaseQueryOptions< TQueryFnData, TError, @@ -82,7 +83,7 @@ export interface CreateInfiniteQueryOptions< TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, -> extends Omit< +> extends OmitKeyof< InfiniteQueryObserverOptions< TQueryFnData, TError, @@ -99,7 +100,7 @@ export type CreateBaseQueryResult< TError = DefaultError, TState = QueryObserverResult, > = BaseQueryNarrowing & - MapToSignals> + MapToSignals> export type CreateQueryResult< TData = unknown, @@ -131,7 +132,7 @@ export interface CreateMutationOptions< TError = DefaultError, TVariables = void, TContext = unknown, -> extends Omit< +> extends OmitKeyof< MutationObserverOptions, '_defaulted' > {} @@ -250,7 +251,7 @@ export type CreateMutationResult< TContext >, > = BaseMutationNarrowing & - MapToSignals> + MapToSignals> type Override = { [AKey in keyof TTargetA]: AKey extends keyof TTargetB diff --git a/packages/query-core/src/__tests__/OmitKeyof.test-d.ts b/packages/query-core/src/__tests__/OmitKeyof.test-d.ts new file mode 100644 index 0000000000..caef030070 --- /dev/null +++ b/packages/query-core/src/__tests__/OmitKeyof.test-d.ts @@ -0,0 +1,59 @@ +import { describe, expectTypeOf, it } from 'vitest' +import type { OmitKeyof } from '..' + +describe('OmitKeyof', () => { + it("'s type check", () => { + type A = { + x: string + y: number + } + + type ExpectedType = { + x: string + } + + // Bad point + // 1. original Omit can use 'z' as type parameter with no type error + // 2. original Omit have no auto complete for 2nd type parameter + expectTypeOf>().toEqualTypeOf() + + // Solution + + // 1. strictly + expectTypeOf< + OmitKeyof< + A, + // OmitKeyof can't use 'z' as type parameter with type error because A don't have key 'z' + // @ts-expect-error Type does not satisfy the constraint keyof A + 'z' | 'y' + > + >().toEqualTypeOf + expectTypeOf< + OmitKeyof< + A, + // OmitKeyof can't use 'z' as type parameter with type error because A don't have key 'z' + // @ts-expect-error Type does not satisfy the constraint keyof A + 'z' | 'y', + 'strictly' + > + >().toEqualTypeOf + + // 2. safely + expectTypeOf< + OmitKeyof< + A, + // OmitKeyof can't use 'z' as type parameter type error with strictly parameter or default parameter + // @ts-expect-error Type does not satisfy the constraint keyof A + 'z' | 'y' + > + >().toEqualTypeOf + expectTypeOf< + OmitKeyof< + A, + // With 'safely', OmitKeyof can use 'z' as type parameter like original Omit but This support autocomplete too yet for DX. + 'z' | 'y', + 'safely' + > + >().toEqualTypeOf + }) +}) diff --git a/packages/query-core/src/infiniteQueryBehavior.ts b/packages/query-core/src/infiniteQueryBehavior.ts index dd79ba8098..09a5229c0d 100644 --- a/packages/query-core/src/infiniteQueryBehavior.ts +++ b/packages/query-core/src/infiniteQueryBehavior.ts @@ -3,6 +3,7 @@ import type { QueryBehavior } from './query' import type { InfiniteData, InfiniteQueryPageParamsOptions, + OmitKeyof, QueryFunctionContext, QueryKey, } from './types' @@ -67,7 +68,7 @@ export function infiniteQueryBehavior( return Promise.resolve(data) } - const queryFnContext: Omit< + const queryFnContext: OmitKeyof< QueryFunctionContext, 'signal' > = { diff --git a/packages/query-core/src/query.ts b/packages/query-core/src/query.ts index 847403bcbc..5cfaa23561 100644 --- a/packages/query-core/src/query.ts +++ b/packages/query-core/src/query.ts @@ -7,6 +7,7 @@ import type { DefaultError, FetchStatus, InitialDataFunction, + OmitKeyof, QueryFunctionContext, QueryKey, QueryMeta, @@ -370,7 +371,10 @@ export class Query< const abortController = new AbortController() // Create query function context - const queryFnContext: Omit, 'signal'> = { + const queryFnContext: OmitKeyof< + QueryFunctionContext, + 'signal' + > = { queryKey: this.queryKey, meta: this.meta, } @@ -421,7 +425,7 @@ export class Query< } // Trigger behavior hook - const context: Omit< + const context: OmitKeyof< FetchContext, 'signal' > = { diff --git a/packages/query-core/src/queryClient.ts b/packages/query-core/src/queryClient.ts index 9cf18be738..87ddfd5d39 100644 --- a/packages/query-core/src/queryClient.ts +++ b/packages/query-core/src/queryClient.ts @@ -12,7 +12,7 @@ import { focusManager } from './focusManager' import { onlineManager } from './onlineManager' import { notifyManager } from './notifyManager' import { infiniteQueryBehavior } from './infiniteQueryBehavior' -import type { DataTag, NoInfer } from './types' +import type { DataTag, NoInfer, OmitKeyof } from './types' import type { QueryState } from './query' import type { CancelOptions, @@ -43,7 +43,7 @@ import type { MutationFilters, QueryFilters, Updater } from './utils' interface QueryDefaults { queryKey: QueryKey - defaultOptions: Omit, 'queryKey'> + defaultOptions: OmitKeyof, 'queryKey'> } interface MutationDefaults { @@ -429,7 +429,7 @@ export class QueryClient { setQueryDefaults( queryKey: QueryKey, options: Partial< - Omit, 'queryKey'> + OmitKeyof, 'queryKey'> >, ): void { this.#queryDefaults.set(hashKey(queryKey), { @@ -440,10 +440,10 @@ export class QueryClient { getQueryDefaults( queryKey: QueryKey, - ): Omit, 'queryKey'> { + ): OmitKeyof, 'queryKey'> { const defaults = [...this.#queryDefaults.values()] - let result: Omit< + let result: OmitKeyof< QueryObserverOptions, 'queryKey' > = {} @@ -458,7 +458,10 @@ export class QueryClient { setMutationDefaults( mutationKey: MutationKey, - options: Omit, 'mutationKey'>, + options: OmitKeyof< + MutationObserverOptions, + 'mutationKey' + >, ): void { this.#mutationDefaults.set(hashKey(mutationKey), { mutationKey, diff --git a/packages/query-core/src/types.ts b/packages/query-core/src/types.ts index 0532a14c10..b7bcc1ffbc 100644 --- a/packages/query-core/src/types.ts +++ b/packages/query-core/src/types.ts @@ -7,6 +7,14 @@ import type { QueryFilters, QueryTypeFilter, SkipToken } from './utils' import type { QueryCache } from './queryCache' import type { MutationCache } from './mutationCache' +export type OmitKeyof< + TObject, + TKey extends TStrictly extends 'safely' + ? keyof TObject | (string & Record) + : keyof TObject, + TStrictly extends 'strictly' | 'safely' = 'strictly', +> = Omit + export type NoInfer = [T][T extends any ? 0 : never] export interface Register { @@ -341,7 +349,7 @@ export type Optional = Pick< Partial, TKey > & - Omit + OmitKeyof export type DefaultedQueryObserverOptions< TQueryFnData = unknown, @@ -889,7 +897,10 @@ export interface QueryClientConfig { } export interface DefaultOptions { - queries?: Omit, 'suspense' | 'queryKey'> + queries?: OmitKeyof< + QueryObserverOptions, + 'suspense' | 'queryKey' + > mutations?: MutationObserverOptions } diff --git a/packages/react-query-persist-client/src/PersistQueryClientProvider.tsx b/packages/react-query-persist-client/src/PersistQueryClientProvider.tsx index 44f7eb9252..3f25bc89de 100644 --- a/packages/react-query-persist-client/src/PersistQueryClientProvider.tsx +++ b/packages/react-query-persist-client/src/PersistQueryClientProvider.tsx @@ -7,10 +7,10 @@ import { } from '@tanstack/query-persist-client-core' import { IsRestoringProvider, QueryClientProvider } from '@tanstack/react-query' import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core' -import type { QueryClientProviderProps } from '@tanstack/react-query' +import type { OmitKeyof, QueryClientProviderProps } from '@tanstack/react-query' export type PersistQueryClientProviderProps = QueryClientProviderProps & { - persistOptions: Omit + persistOptions: OmitKeyof onSuccess?: () => Promise | unknown } diff --git a/packages/react-query/src/HydrationBoundary.tsx b/packages/react-query/src/HydrationBoundary.tsx index 54dfd5258f..47f56f3587 100644 --- a/packages/react-query/src/HydrationBoundary.tsx +++ b/packages/react-query/src/HydrationBoundary.tsx @@ -6,13 +6,17 @@ import { useQueryClient } from './QueryClientProvider' import type { DehydratedState, HydrateOptions, + OmitKeyof, QueryClient, } from '@tanstack/query-core' export interface HydrationBoundaryProps { state?: unknown - options?: Omit & { - defaultOptions?: Omit + options?: OmitKeyof & { + defaultOptions?: OmitKeyof< + Exclude, + 'mutations' + > } children?: React.ReactNode queryClient?: QueryClient diff --git a/packages/react-query/src/__tests__/useQueries.test-d.tsx b/packages/react-query/src/__tests__/useQueries.test-d.tsx index a1057201cc..f3cff9632d 100644 --- a/packages/react-query/src/__tests__/useQueries.test-d.tsx +++ b/packages/react-query/src/__tests__/useQueries.test-d.tsx @@ -1,6 +1,7 @@ import { describe, expectTypeOf, it } from 'vitest' import { queryOptions } from '../queryOptions' import { useQueries } from '../useQueries' +import type { OmitKeyof } from '..' import type { UseQueryOptions } from '../types' describe('UseQueries config object overload', () => { @@ -104,7 +105,7 @@ describe('UseQueries config object overload', () => { type Data = string const useCustomQueries = ( - options?: Omit, 'queryKey' | 'queryFn'>, + options?: OmitKeyof, 'queryKey' | 'queryFn'>, ) => { return useQueries({ queries: [ diff --git a/packages/react-query/src/__tests__/useQuery.test-d.tsx b/packages/react-query/src/__tests__/useQuery.test-d.tsx index 286dfb89a2..4d3f4ddade 100644 --- a/packages/react-query/src/__tests__/useQuery.test-d.tsx +++ b/packages/react-query/src/__tests__/useQuery.test-d.tsx @@ -1,6 +1,7 @@ import { describe, expectTypeOf, it } from 'vitest' import { useQuery } from '../useQuery' import { queryOptions } from '../queryOptions' +import type { OmitKeyof } from '..' import type { UseQueryOptions } from '../types' describe('initialData', () => { @@ -111,7 +112,7 @@ describe('initialData', () => { type Data = string const useCustomQuery = ( - options?: Omit, 'queryKey' | 'queryFn'>, + options?: OmitKeyof, 'queryKey' | 'queryFn'>, ) => { return useQuery({ ...options, diff --git a/packages/react-query/src/__tests__/useQuery.test.tsx b/packages/react-query/src/__tests__/useQuery.test.tsx index e96727158f..12656e5929 100644 --- a/packages/react-query/src/__tests__/useQuery.test.tsx +++ b/packages/react-query/src/__tests__/useQuery.test.tsx @@ -16,6 +16,7 @@ import { } from './utils' import type { DefinedUseQueryResult, + OmitKeyof, QueryFunction, UseQueryOptions, UseQueryResult, @@ -147,7 +148,7 @@ describe('useQuery', () => { token: string, // return type must be wrapped with TQueryFnReturn ) => Promise, - options?: Omit< + options?: OmitKeyof< UseQueryOptions, 'queryKey' | 'queryFn' | 'initialData' >, @@ -169,7 +170,7 @@ describe('useQuery', () => { >( qk: TQueryKey, fetcher: () => Promise, - options?: Omit< + options?: OmitKeyof< UseQueryOptions, 'queryKey' | 'queryFn' | 'initialData' >, diff --git a/packages/react-query/src/types.ts b/packages/react-query/src/types.ts index eb5b942a1a..c4e4804e6b 100644 --- a/packages/react-query/src/types.ts +++ b/packages/react-query/src/types.ts @@ -9,6 +9,7 @@ import type { MutateFunction, MutationObserverOptions, MutationObserverResult, + OmitKeyof, QueryKey, QueryObserverOptions, QueryObserverResult, @@ -33,7 +34,7 @@ export interface UseQueryOptions< TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> extends Omit< +> extends OmitKeyof< UseBaseQueryOptions, 'suspense' > {} @@ -43,7 +44,7 @@ export interface UseSuspenseQueryOptions< TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> extends Omit< +> extends OmitKeyof< UseQueryOptions, 'enabled' | 'throwOnError' | 'placeholderData' > {} @@ -55,7 +56,7 @@ export interface UseInfiniteQueryOptions< TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, -> extends Omit< +> extends OmitKeyof< InfiniteQueryObserverOptions< TQueryFnData, TError, @@ -74,7 +75,7 @@ export interface UseSuspenseInfiniteQueryOptions< TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, -> extends Omit< +> extends OmitKeyof< UseInfiniteQueryOptions< TQueryFnData, TError, @@ -99,7 +100,7 @@ export type UseQueryResult< export type UseSuspenseQueryResult< TData = unknown, TError = DefaultError, -> = Omit, 'isPlaceholderData'> +> = OmitKeyof, 'isPlaceholderData'> export type DefinedUseQueryResult< TData = unknown, @@ -119,14 +120,17 @@ export type DefinedUseInfiniteQueryResult< export type UseSuspenseInfiniteQueryResult< TData = unknown, TError = DefaultError, -> = Omit, 'isPlaceholderData'> +> = OmitKeyof< + DefinedInfiniteQueryObserverResult, + 'isPlaceholderData' +> export interface UseMutationOptions< TData = unknown, TError = DefaultError, TVariables = void, TContext = unknown, -> extends Omit< +> extends OmitKeyof< MutationObserverOptions, '_defaulted' > {} diff --git a/packages/react-query/src/useQueries.ts b/packages/react-query/src/useQueries.ts index 9da316d90e..f33c3513ef 100644 --- a/packages/react-query/src/useQueries.ts +++ b/packages/react-query/src/useQueries.ts @@ -27,6 +27,7 @@ import type { } from './types' import type { DefaultError, + OmitKeyof, QueriesObserverOptions, QueriesPlaceholderDataFunction, QueryClient, @@ -43,9 +44,9 @@ type UseQueryOptionsForUseQueries< TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> = Omit< +> = OmitKeyof< UseQueryOptions, - 'placeholderData' | 'suspense' + 'placeholderData' > & { placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction } diff --git a/packages/solid-query-persist-client/src/PersistQueryClientProvider.tsx b/packages/solid-query-persist-client/src/PersistQueryClientProvider.tsx index 8a6d72396f..e6092a582c 100644 --- a/packages/solid-query-persist-client/src/PersistQueryClientProvider.tsx +++ b/packages/solid-query-persist-client/src/PersistQueryClientProvider.tsx @@ -5,11 +5,11 @@ import { import { createEffect, createMemo, createSignal, onCleanup } from 'solid-js' import { IsRestoringProvider, QueryClientProvider } from '@tanstack/solid-query' import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core' -import type { QueryClientProviderProps } from '@tanstack/solid-query' +import type { OmitKeyof, QueryClientProviderProps } from '@tanstack/solid-query' import type { JSX } from 'solid-js' export type PersistQueryClientProviderProps = QueryClientProviderProps & { - persistOptions: Omit + persistOptions: OmitKeyof onSuccess?: () => void } diff --git a/packages/solid-query/src/QueryClient.ts b/packages/solid-query/src/QueryClient.ts index af5ab8aff0..ddbe9927da 100644 --- a/packages/solid-query/src/QueryClient.ts +++ b/packages/solid-query/src/QueryClient.ts @@ -2,6 +2,7 @@ import { QueryClient as QueryCoreClient } from '@tanstack/query-core' import type { DefaultOptions as CoreDefaultOptions, DefaultError, + OmitKeyof, QueryClientConfig as QueryCoreClientConfig, InfiniteQueryObserverOptions as QueryCoreInfiniteQueryObserverOptions, QueryObserverOptions as QueryCoreObserverOptions, @@ -15,7 +16,7 @@ export interface QueryObserverOptions< TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = never, -> extends Omit< +> extends OmitKeyof< QueryCoreObserverOptions< TQueryFnData, TError, @@ -45,7 +46,7 @@ export interface InfiniteQueryObserverOptions< TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, -> extends Omit< +> extends OmitKeyof< QueryCoreInfiniteQueryObserverOptions< TQueryFnData, TError, @@ -70,7 +71,7 @@ export interface InfiniteQueryObserverOptions< export interface DefaultOptions extends CoreDefaultOptions { - queries?: Omit, 'queryKey'> + queries?: OmitKeyof, 'queryKey'> } export interface QueryClientConfig extends QueryCoreClientConfig { diff --git a/packages/solid-query/src/__tests__/createQuery.test.tsx b/packages/solid-query/src/__tests__/createQuery.test.tsx index 35876be316..4014eaf258 100644 --- a/packages/solid-query/src/__tests__/createQuery.test.tsx +++ b/packages/solid-query/src/__tests__/createQuery.test.tsx @@ -30,6 +30,7 @@ import type { CreateQueryOptions, CreateQueryResult, DefinedCreateQueryResult, + OmitKeyof, QueryFunction, } from '..' import type { Mock } from 'vitest' @@ -163,9 +164,10 @@ describe('createQuery', () => { token: string, // return type must be wrapped with TQueryFnReturn ) => Promise, - options?: Omit< + options?: OmitKeyof< CreateQueryOptions, - 'queryKey' | 'queryFn' | 'initialData' + 'queryKey' | 'queryFn' | 'initialData', + 'safely' >, ) => createQuery(() => ({ @@ -185,9 +187,10 @@ describe('createQuery', () => { >( qk: TQueryKey, fetcher: () => Promise, - options?: Omit< + options?: OmitKeyof< CreateQueryOptions, - 'queryKey' | 'queryFn' | 'initialData' + 'queryKey' | 'queryFn' | 'initialData', + 'safely' >, ) => createQuery(() => ({ queryKey: qk, queryFn: fetcher, ...options })) const testFuncStyle = useWrappedFuncStyleQuery([''], async () => true) diff --git a/packages/solid-query/src/createQueries.ts b/packages/solid-query/src/createQueries.ts index fc4d8a9368..77de5f8e1a 100644 --- a/packages/solid-query/src/createQueries.ts +++ b/packages/solid-query/src/createQueries.ts @@ -18,6 +18,7 @@ import type { Accessor } from 'solid-js' import type { QueryClient } from './QueryClient' import type { DefaultError, + OmitKeyof, QueriesObserverOptions, QueriesPlaceholderDataFunction, QueryFunction, @@ -34,7 +35,7 @@ type CreateQueryOptionsForCreateQueries< TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> = Omit< +> = OmitKeyof< SolidQueryOptions, 'placeholderData' > & { @@ -293,7 +294,7 @@ export function createQueries< const dataResources_ = dataResources() for (let index = 0; index < dataResources_.length; index++) { const dataResource = dataResources_[index]! - const unwrappedResult = { ...unwrap(result[index]!) } + const unwrappedResult = { ...unwrap(result[index]) } // @ts-expect-error typescript pedantry regarding the possible range of index setState(index, unwrap(unwrappedResult)) dataResource[1].mutate(() => unwrap(state[index]!.data)) diff --git a/packages/solid-query/src/types.ts b/packages/solid-query/src/types.ts index 0155d7137a..5fbcf1afd5 100644 --- a/packages/solid-query/src/types.ts +++ b/packages/solid-query/src/types.ts @@ -7,6 +7,7 @@ import type { MutateFunction, MutationObserverOptions, MutationObserverResult, + OmitKeyof, QueryKey, QueryObserverResult, } from '@tanstack/query-core' @@ -83,7 +84,7 @@ export interface SolidInfiniteQueryOptions< TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, -> extends Omit< +> extends OmitKeyof< InfiniteQueryObserverOptions< TQueryFnData, TError, @@ -126,7 +127,7 @@ export interface SolidMutationOptions< TError = DefaultError, TVariables = void, TContext = unknown, -> extends Omit< +> extends OmitKeyof< MutationObserverOptions, '_defaulted' > {} diff --git a/packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte b/packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte index 0543d1ac80..5f5e04ada7 100644 --- a/packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte +++ b/packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte @@ -7,11 +7,11 @@ } from '@tanstack/svelte-query' import { writable } from 'svelte/store' import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core' - import type { QueryClient } from '@tanstack/svelte-query' + import type { OmitKeyof, QueryClient } from '@tanstack/svelte-query' export let client: QueryClient export let onSuccess: () => Promise | unknown = () => undefined - export let persistOptions: Omit + export let persistOptions: OmitKeyof const isRestoring = writable(true) setIsRestoringContext(isRestoring) diff --git a/packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte b/packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte index 99221abf63..a677e51eb2 100644 --- a/packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte +++ b/packages/svelte-query-persist-client/src/__tests__/AwaitOnSuccess/Provider.svelte @@ -1,12 +1,12 @@ diff --git a/packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte b/packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte index b946fb6739..e568a65844 100644 --- a/packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte +++ b/packages/svelte-query-persist-client/src/__tests__/OnSuccess/Provider.svelte @@ -1,11 +1,11 @@ diff --git a/packages/svelte-query-persist-client/src/__tests__/RemoveCache/Provider.svelte b/packages/svelte-query-persist-client/src/__tests__/RemoveCache/Provider.svelte index 2ee133e3f2..cb6c77f55f 100644 --- a/packages/svelte-query-persist-client/src/__tests__/RemoveCache/Provider.svelte +++ b/packages/svelte-query-persist-client/src/__tests__/RemoveCache/Provider.svelte @@ -1,11 +1,11 @@ diff --git a/packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte b/packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte index 7f8e8c919f..8d2d7deb87 100644 --- a/packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte +++ b/packages/svelte-query-persist-client/src/__tests__/RestoreCache/Provider.svelte @@ -1,13 +1,13 @@ diff --git a/packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte b/packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte index 97e8c23bf2..28d643c910 100644 --- a/packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte +++ b/packages/svelte-query-persist-client/src/__tests__/UseQueries/Provider.svelte @@ -1,13 +1,13 @@ diff --git a/packages/svelte-query/src/createQueries.ts b/packages/svelte-query/src/createQueries.ts index 48eb64fe5e..9d6aa1ff48 100644 --- a/packages/svelte-query/src/createQueries.ts +++ b/packages/svelte-query/src/createQueries.ts @@ -7,6 +7,7 @@ import type { Readable } from 'svelte/store' import type { StoreOrVal } from './types' import type { DefaultError, + OmitKeyof, QueriesObserverOptions, QueriesPlaceholderDataFunction, QueryClient, @@ -25,7 +26,7 @@ type QueryObserverOptionsForCreateQueries< TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> = Omit< +> = OmitKeyof< QueryObserverOptions, 'placeholderData' > & { diff --git a/packages/svelte-query/src/types.ts b/packages/svelte-query/src/types.ts index a4114198e3..66bac4e229 100644 --- a/packages/svelte-query/src/types.ts +++ b/packages/svelte-query/src/types.ts @@ -6,6 +6,7 @@ import type { MutateFunction, MutationObserverOptions, MutationObserverResult, + OmitKeyof, QueryKey, QueryObserverOptions, QueryObserverResult, @@ -86,7 +87,7 @@ export type CreateMutationOptions< TVariables = void, TContext = unknown, > = StoreOrVal< - Omit< + OmitKeyof< MutationObserverOptions, '_defaulted' > diff --git a/packages/vue-query/src/__tests__/useQueries.types.test.ts b/packages/vue-query/src/__tests__/useQueries.types.test.ts index 0d3b67f84e..50e01064a6 100644 --- a/packages/vue-query/src/__tests__/useQueries.types.test.ts +++ b/packages/vue-query/src/__tests__/useQueries.types.test.ts @@ -3,6 +3,7 @@ import { reactive } from 'vue' import { useQueries } from '..' import { queryOptions } from '../queryOptions' import { doNotExecute } from './test-utils' +import type { OmitKeyof } from '..' import type { UseQueryOptions } from '../useQuery' import type { Equal, Expect } from './test-utils' @@ -129,7 +130,11 @@ describe('UseQueries config object overload', () => { type Data = string const useCustomQueries = ( - options?: Omit, 'queryKey' | 'queryFn'>, + options?: OmitKeyof< + UseQueryOptions, + 'queryKey' | 'queryFn', + 'safely' + >, ) => { return useQueries({ queries: [ diff --git a/packages/vue-query/src/__tests__/useQuery.types.test.ts b/packages/vue-query/src/__tests__/useQuery.types.test.ts index abf587f5d5..2e1f7696b5 100644 --- a/packages/vue-query/src/__tests__/useQuery.types.test.ts +++ b/packages/vue-query/src/__tests__/useQuery.types.test.ts @@ -3,6 +3,7 @@ import { reactive } from 'vue-demi' import { useQuery } from '../useQuery' import { queryOptions } from '../queryOptions' import { doNotExecute, simpleFetcher } from './test-utils' +import type { OmitKeyof } from '..' import type { UseQueryOptions } from '../useQuery' import type { Equal, Expect } from './test-utils' @@ -159,7 +160,11 @@ describe('initialData', () => { type Data = string const useCustomQuery = ( - options?: Omit, 'queryKey' | 'queryFn'>, + options?: OmitKeyof< + UseQueryOptions, + 'queryKey' | 'queryFn', + 'safely' + >, ) => { return useQuery({ ...options, diff --git a/packages/vue-query/src/queryClient.ts b/packages/vue-query/src/queryClient.ts index e475e090a8..019c9d56f7 100644 --- a/packages/vue-query/src/queryClient.ts +++ b/packages/vue-query/src/queryClient.ts @@ -20,6 +20,7 @@ import type { MutationKey, MutationObserverOptions, NoInfer, + OmitKeyof, QueryClientConfig, QueryFilters, QueryKey, @@ -379,7 +380,7 @@ export class QueryClient extends QC { setQueryDefaults( queryKey: MaybeRefDeep, options: MaybeRefDeep< - Omit, 'queryKey'> + OmitKeyof, 'queryKey'> >, ): void { super.setQueryDefaults(cloneDeepUnref(queryKey), cloneDeepUnref(options)) @@ -387,7 +388,7 @@ export class QueryClient extends QC { getQueryDefaults( queryKey: MaybeRefDeep, - ): Omit, 'queryKey'> { + ): OmitKeyof, 'queryKey'> { return super.getQueryDefaults(cloneDeepUnref(queryKey)) }