Skip to content

Commit bab23c1

Browse files
author
liaoxuan
committed
feat: export CreateMutationOptions & new typeUtil inferError
1 parent 4d61e36 commit bab23c1

4 files changed

Lines changed: 43 additions & 20 deletions

File tree

README-zh_CN.md

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -384,17 +384,20 @@ import { Middleware, MutationHook, QueryHook, getKey } from 'react-query-kit'
384384
const myMiddleware: Middleware<
385385
QueryHook<Response, Variables>
386386
> = useQueryNext => {
387-
return options => {
387+
return (options, queryClient) => {
388388
const { userId } = useAuth()
389-
const client = useQueryClient()
389+
const client = useQueryClient(queryClient)
390390
const variables = options.variables ?? { id: userId }
391391
const hasData = () => !!client.getQueryData(useUser.getKey(variables))
392392

393-
return useQueryNext({
394-
...options,
395-
variables,
396-
enabled: options.enabled ?? !hasData(),
397-
})
393+
return useQueryNext(
394+
{
395+
...options,
396+
variables,
397+
enabled: options.enabled ?? !hasData(),
398+
},
399+
queryClient
400+
)
398401
}
399402
}
400403

@@ -482,13 +485,14 @@ exit a
482485
您可以使用 `inferData``inferVariables` 提取任何自定义 hook 的 TypeScript 类型
483486

484487
```ts
485-
import { inferData, inferFnData, inferVariables, inferOptions } from 'react-query-kit'
488+
import { inferData, inferFnData, inferError, inferVariables, inferOptions } from 'react-query-kit'
486489

487490
const useProjects = createInfiniteQuery<Response, Variables>(...)
488491

489492
inferData<typeof useProjects> // InfiniteData<Response>
490493
inferFnData<typeof useProjects> // Response
491494
inferVariables<typeof useProjects> // Variables
495+
inferError<typeof useProjects> // Error
492496
inferOptions<typeof useProjects> // InfiniteQueryHookOptions<...>
493497
```
494498

README.md

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<a href="https://www.npmjs.com/package/react-query-kit"><img src="https://badgen.net/npm/v/react-query-kit" alt="Latest published version" target="\_parent"></a>
1717
<a href="https://unpkg.com/browse/react-query-kit@latest/build/umd/index.production.js" rel="nofollow"><img src="https://img.badgesize.io/https:/unpkg.com/react-query-kit@latest/build/umd/index.production.js?label=gzip%20size&compression=gzip" alt="gzip size"></a>
1818
<a href="https://github.com/liaoliao666/react-query-kit"><img src="https://badgen.net/npm/types/react-query-kit" alt="Types included" target="\_parent"></a>
19-
<a href="https://www.npmjs.com/package/react-query-kit"><img src="https://badgen.net/npm/license/react-query-kit" alt="License" target="\_parent"></a>
19+
<a href="https://github.com/liaoliao666/react-query-kit/blob/main/LICENSE"><img src="https://badgen.net/npm/license/react-query-kit" alt="License" target="\_parent"></a>
2020
<a href="https://www.npmjs.com/package/react-query-kit"><img src="https://badgen.net/npm/dt/react-query-kit" alt="Number of downloads" target="\_parent"></a>
2121
<a href="https://github.com/liaoliao666/react-query-kit"><img src="https://img.shields.io/github/stars/liaoliao666/react-query-kit.svg?style=social&amp;label=Star" alt="GitHub Stars" target="\_parent"></a>
2222
</p>
@@ -384,17 +384,20 @@ import { Middleware, MutationHook, QueryHook, getKey } from 'react-query-kit'
384384
const myMiddleware: Middleware<
385385
QueryHook<Response, Variables>
386386
> = useQueryNext => {
387-
return options => {
387+
return (options, queryClient) => {
388388
const { userId } = useAuth()
389-
const client = useQueryClient()
389+
const client = useQueryClient(queryClient)
390390
const variables = options.variables ?? { id: userId }
391391
const hasData = () => !!client.getQueryData(useUser.getKey(variables))
392392

393-
return useQueryNext({
394-
...options,
395-
variables,
396-
enabled: options.enabled ?? !hasData(),
397-
})
393+
return useQueryNext(
394+
{
395+
...options,
396+
variables,
397+
enabled: options.enabled ?? !hasData(),
398+
},
399+
queryClient
400+
)
398401
}
399402
}
400403

@@ -482,13 +485,14 @@ exit a
482485
You can extract the TypeScript type of any custom hook with `inferData` or `inferVariables`
483486

484487
```ts
485-
import { inferData, inferFnData, inferVariables, inferOptions } from 'react-query-kit'
488+
import { inferData, inferFnData, inferError, inferVariables, inferOptions } from 'react-query-kit'
486489

487-
const useProjects = createInfiniteQuery<Response, Variables>(...)
490+
const useProjects = createInfiniteQuery<Response, Variables, Error>(...)
488491

489492
inferData<typeof useProjects> // InfiniteData<Response>
490493
inferFnData<typeof useProjects> // Response
491494
inferVariables<typeof useProjects> // Variables
495+
inferError<typeof useProjects> // Error
492496
inferOptions<typeof useProjects> // InfiniteQueryHookOptions<...>
493497
```
494498

src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,14 @@ export type {
2121
SuspenseInfiniteQueryHook,
2222
SuspenseInfiniteQueryHookOptions,
2323
SuspenseInfiniteQueryHookResult,
24+
CreateMutationOptions,
2425
MutationHookOptions,
2526
MutationHook,
2627
inferVariables,
2728
inferData,
2829
inferFnData,
2930
inferOptions,
31+
inferError,
32+
inferCreateOptions,
3033
Middleware,
3134
} from './types'

src/types.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,14 @@ export type AdditionalCreateOptions<TFnData, TVariables, TPageParam = never> = {
9494
variables?: TVariables
9595
}
9696

97-
type inferMiddleware<T extends (...args: any) => any> = (
97+
type inferMiddlewareHook<T extends (...args: any) => any> = (
9898
options: inferCreateOptions<T>,
9999
queryClient?: CompatibleWithV4<QueryClient, void>
100100
) => ReturnType<T>
101101

102102
export type Middleware<
103103
T extends (...args: any) => any = QueryHook<any, any, any>
104-
> = (hook: inferMiddleware<T>) => inferMiddleware<T>
104+
> = (hook: inferMiddlewareHook<T>) => inferMiddlewareHook<T>
105105

106106
export type DeepPartial<T> = T extends object
107107
? {
@@ -458,6 +458,18 @@ export type inferFnData<T> = T extends QueryHook<infer TData, any, any>
458458
? TData
459459
: never
460460

461+
export type inferError<T> = T extends QueryHook<any, any, infer TError>
462+
? TError
463+
: T extends SuspenseQueryHook<any, any, infer TError>
464+
? TError
465+
: T extends InfiniteQueryHook<any, any, infer TError>
466+
? TError
467+
: T extends SuspenseInfiniteQueryHook<any, any, infer TError>
468+
? TError
469+
: T extends MutationHook<any, any, infer TError>
470+
? TError
471+
: never
472+
461473
export type inferOptions<T> = T extends QueryHook<
462474
infer TFnData,
463475
infer TVariables,

0 commit comments

Comments
 (0)