Skip to content

Commit bb3535d

Browse files
authored
fix(types): improve v2 types (TanStack#655)
* fix(types): add variables argument to onError and onSettled and add generic TSnapshot * refactor(types); add generic result type in BaseQueryOptions
1 parent 1c51a8b commit bb3535d

File tree

2 files changed

+48
-36
lines changed

2 files changed

+48
-36
lines changed

types/index.d.ts

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ export interface BaseSharedOptions {
217217
suspense: boolean
218218
}
219219

220-
export interface BaseQueryOptions<TError = Error> {
220+
export interface BaseQueryOptions<TResult = unknown, TError = Error> {
221221
/**
222222
* Set this to `false` to disable automatic refetching when the query mounts or changes query keys.
223223
* To refetch the query, use the `refetch` method returned from the `useQuery` instance.
@@ -237,18 +237,16 @@ export interface BaseQueryOptions<TError = Error> {
237237
refetchIntervalInBackground?: boolean
238238
refetchOnWindowFocus?: boolean
239239
refetchOnMount?: boolean
240-
onSuccess?: (data: any) => void
240+
onSuccess?: (data: TResult) => void
241241
onError?: (err: TError) => void
242-
onSettled?: (data: any, error: TError | null) => void
242+
onSettled?: (data: TResult | undefined, error: TError | null) => void
243243
isDataEqual?: (oldData: unknown, newData: unknown) => boolean
244244
useErrorBoundary?: boolean
245245
}
246246

247247
export interface QueryOptions<TResult, TError = Error>
248-
extends BaseQueryOptions<TError> {
248+
extends BaseQueryOptions<TResult, TError> {
249249
suspense?: boolean
250-
onSuccess?: (data: TResult) => void
251-
onSettled?: (data: TResult | undefined, error: TError | null) => void
252250
initialData?: TResult | (() => TResult | undefined)
253251
initialStale?: boolean | (() => boolean | undefined)
254252
}
@@ -387,37 +385,57 @@ export interface InfiniteQueryResult<TResult, TMoreVariable, TError = Error>
387385
) => Promise<TResult[]> | undefined
388386
}
389387

390-
export function useMutation<TResults, TVariables = undefined, TError = Error>(
391-
mutationFn: MutationFunction<TResults, TVariables, TError>,
392-
mutationOptions?: MutationOptions<TResults, TVariables, TError>
388+
export function useMutation<
389+
TResult,
390+
TVariables = undefined,
391+
TError = Error,
392+
TSnapshot = unknown
393+
>(
394+
mutationFn: MutationFunction<TResult, TVariables, TError, TSnapshot>,
395+
mutationOptions?: MutationOptions<TResult, TVariables, TError, TSnapshot>
393396
): [
394-
MutateFunction<TResults, TVariables, TError>,
395-
MutationResult<TResults, TError>
397+
MutateFunction<TResult, TVariables, TError>,
398+
MutationResult<TResult, TError>
396399
]
397400

398-
export type MutationFunction<TResults, TVariables, TError = Error> = (
401+
export type MutationFunction<
402+
TResult,
403+
TVariables,
404+
TError = Error,
405+
TSnapshot = unknown
406+
> = (
399407
variables: TVariables,
400-
mutateOptions?: MutateOptions<TResults, TVariables, TError>
401-
) => Promise<TResults>
408+
mutateOptions?: MutateOptions<TResult, TVariables, TError, TSnapshot>
409+
) => Promise<TResult>
402410

403-
export interface MutateOptions<TResult, TVariables, TError = Error> {
411+
export interface MutateOptions<
412+
TResult,
413+
TVariables,
414+
TError = Error,
415+
TSnapshot = unknown
416+
> {
404417
onSuccess?: (data: TResult, variables: TVariables) => Promise<void> | void
405418
onError?: (
406419
error: TError,
407-
snapshotValue: unknown,
408-
onMutateValue: (variable: TVariables) => Promise<unknown> | unknown
420+
variables: TVariables,
421+
snapshotValue: TSnapshot
409422
) => Promise<void> | void
410423
onSettled?: (
411424
data: undefined | TResult,
412425
error: TError | null,
413-
snapshotValue?: unknown
426+
variables: TVariables,
427+
snapshotValue?: TSnapshot
414428
) => Promise<void> | void
415429
throwOnError?: boolean
416430
}
417431

418-
export interface MutationOptions<TResult, TVariables, TError = Error>
419-
extends MutateOptions<TResult, TVariables, TError> {
420-
onMutate?: (variables: TVariables) => Promise<unknown> | unknown
432+
export interface MutationOptions<
433+
TResult,
434+
TVariables,
435+
TError = Error,
436+
TSnapshot = unknown
437+
> extends MutateOptions<TResult, TVariables, TError, TSnapshot> {
438+
onMutate?: (variables: TVariables) => Promise<TSnapshot> | TSnapshot
421439
useErrorBoundary?: boolean
422440
}
423441

@@ -605,7 +623,7 @@ export interface QueryCache {
605623
): void
606624
isFetching: number
607625
subscribe(callback: (queryCache: QueryCache) => void): () => void
608-
clear(): void,
626+
clear(): void
609627
resetErrorBoundaries: () => void
610628
}
611629

@@ -655,18 +673,7 @@ export interface ReactQueryProviderConfig<TError = Error> {
655673
) => [string, QueryKeyPart[]] | []
656674
}
657675
shared?: BaseSharedOptions
658-
mutations?: {
659-
throwOnError?: boolean
660-
useErrorBoundary?: boolean
661-
onMutate?: (variables: unknown) => Promise<unknown> | unknown
662-
onSuccess?: (data: unknown, variables?: unknown) => void
663-
onError?: (err: TError, snapshotValue?: unknown) => void
664-
onSettled?: (
665-
data: unknown | undefined,
666-
error: TError | null,
667-
snapshotValue?: unknown
668-
) => void
669-
}
676+
mutations?: MutationOptions<unknown, unknown, TError>
670677
}
671678

672679
export type ConsoleFunction = (...args: any[]) => void

types/test.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,9 +448,14 @@ function globalConfig() {
448448
useErrorBoundary: true,
449449
onMutate: (variables: unknown) => Promise.resolve(),
450450
onSuccess: (data: unknown, variables: unknown) => undefined,
451-
onError: (err: Error, snapshotValue: unknown) => undefined,
452-
onSettled: (data: unknown, error: Error | null, snapshotValue?: any) =>
451+
onError: (err: Error, variables: unknown, snapshotValue: unknown) =>
453452
undefined,
453+
onSettled: (
454+
data: unknown,
455+
error: Error | null,
456+
variables: unknown,
457+
snapshotValue?: unknown
458+
) => undefined,
454459
},
455460
}
456461
}

0 commit comments

Comments
 (0)