Skip to content

Commit

Permalink
feat: optimize useRequest data return type of typescript (#239)
Browse files Browse the repository at this point in the history
  • Loading branch information
XiaoDaiGua-Ray authored Jan 24, 2025
1 parent 7f81dff commit 6c4045d
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 18 deletions.
19 changes: 17 additions & 2 deletions packages/hooks/src/useRequest/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,12 @@ export interface UseRequestPlugin<TData, TParams extends unknown[] = unknown[],
) => Partial<UseRequestFetchState<TData, TParams>>
}

export interface useRequestResult<TData, TParams extends unknown[]> {
export interface useRequestResult<
TData,
TParams extends unknown[],
FormatResult = any,
Initial = any
> {
/**
* Is the service being executed.
*/
Expand All @@ -292,7 +297,17 @@ export interface useRequestResult<TData, TParams extends unknown[]> {
/**
* Data returned by service.
*/
data: Readonly<Ref<TData | undefined>>
data: Readonly<
Ref<
FormatResult extends false
? Initial extends false
? TData | undefined
: TData
: FormatResult extends (...args: any[]) => any
? ReturnType<FormatResult> | undefined
: FormatResult | undefined
>
>

/**
* Exception thrown by service.
Expand Down
84 changes: 68 additions & 16 deletions packages/hooks/src/useRequest/useRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import { withArgs } from './utils/resolve-args'
export type PluginsMiddleOptionsType<
PluginsOptions,
TData,
TParams extends unknown[] = unknown[]
TParams extends unknown[] = unknown[],
> = PluginsOptions extends (infer P)[]
? P extends UseRequestPlugin<TData, TParams, infer R>
? R
Expand All @@ -34,8 +34,11 @@ export type PluginsMiddleOptionsType<
export function useRequest<
TData,
TParams extends unknown[] = unknown[],
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<TData, TParams>[],
SR = any
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<
TData,
TParams
>[],
SR = any,
>(
service: UseRequestService<SR, TParams>,
options: UseRequestOptionsWithFormatResult<
Expand All @@ -46,14 +49,31 @@ export function useRequest<
> &
UseRequestOptionsWithInitialData<SR, TParams, PluginsOptions>,
plugins?: PluginsOptions,
): useRequestResult<TData, TParams>
): useRequestResult<
TData,
TParams,
UseRequestOptionsWithFormatResult<
TData,
TParams,
PluginsMiddleOptionsType<PluginsOptions, TData, TParams>,
SR
>['formatResult'],
UseRequestOptionsWithInitialData<
TData,
TParams,
PluginsMiddleOptionsType<PluginsOptions, TData, TParams>
>['initialData']
>

// 只有 formatResult
export function useRequest<
TData,
TParams extends unknown[] = unknown[],
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<TData, TParams>[],
SR = any
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<
TData,
TParams
>[],
SR = any,
>(
service: UseRequestService<SR, TParams>,
options: UseRequestOptionsWithFormatResult<
Expand All @@ -63,13 +83,26 @@ export function useRequest<
SR
>,
plugins?: PluginsOptions,
): useRequestResult<TData, TParams>
): useRequestResult<
TData,
TParams,
UseRequestOptionsWithFormatResult<
TData,
TParams,
PluginsMiddleOptionsType<PluginsOptions, TData, TParams>,
SR
>['formatResult'],
false
>

// 只有 initialData
export function useRequest<
TData,
TParams extends unknown[] = unknown[],
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<TData, TParams>[]
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<
TData,
TParams
>[],
>(
service: UseRequestService<TData, TParams>,
options: UseRequestOptionsWithInitialData<
Expand All @@ -78,13 +111,25 @@ export function useRequest<
PluginsMiddleOptionsType<PluginsOptions, TData, TParams>
>,
plugins?: PluginsOptions,
): useRequestResult<TData, TParams>
): useRequestResult<
TData,
TParams,
false,
UseRequestOptionsWithInitialData<
TData,
TParams,
PluginsMiddleOptionsType<PluginsOptions, TData, TParams>
>['initialData']
>

// 无 formatResults 和 initialData
export function useRequest<
TData,
TParams extends unknown[] = unknown[],
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<TData, TParams>[]
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<
TData,
TParams
>[],
>(
service: UseRequestService<TData, TParams>,
options?: UseRequestOptions<
Expand All @@ -93,12 +138,15 @@ export function useRequest<
PluginsMiddleOptionsType<PluginsOptions, TData, TParams>
>,
plugins?: PluginsOptions,
): useRequestResult<TData, TParams>
): useRequestResult<TData, TParams, false, false>

export function useRequest<
TData,
TParams extends unknown[] = unknown[],
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<TData, TParams>[]
PluginsOptions extends UseRequestPlugin<TData, TParams>[] = UseRequestPlugin<
TData,
TParams
>[],
>(
service: UseRequestService<TData, TParams>,
options?: UseRequestOptions<
Expand All @@ -120,10 +168,14 @@ export function useRequest<
useRetryPlugin,
]?.filter(Boolean)

return withArgs<TData, TParams>(useRequestImplement, options?.use)(service, options, [
...(plugins || []),
...BuiltInPlugins,
] as UseRequestPlugin<TData, TParams>[])
return withArgs<TData, TParams>(useRequestImplement, options?.use)(
service,
options,
[...(plugins || []), ...BuiltInPlugins] as UseRequestPlugin<
TData,
TParams
>[],
)
}

export default useRequest

0 comments on commit 6c4045d

Please sign in to comment.