diff --git a/packages/hooks/src/useRequest/types.ts b/packages/hooks/src/useRequest/types.ts index 8920ccf..ee17e39 100644 --- a/packages/hooks/src/useRequest/types.ts +++ b/packages/hooks/src/useRequest/types.ts @@ -283,7 +283,12 @@ export interface UseRequestPlugin Partial> } -export interface useRequestResult { +export interface useRequestResult< + TData, + TParams extends unknown[], + FormatResult = any, + Initial = any +> { /** * Is the service being executed. */ @@ -292,7 +297,17 @@ export interface useRequestResult { /** * Data returned by service. */ - data: Readonly> + data: Readonly< + Ref< + FormatResult extends false + ? Initial extends false + ? TData | undefined + : TData + : FormatResult extends (...args: any[]) => any + ? ReturnType | undefined + : FormatResult | undefined + > + > /** * Exception thrown by service. diff --git a/packages/hooks/src/useRequest/useRequest.ts b/packages/hooks/src/useRequest/useRequest.ts index ce2e516..9d26fdf 100644 --- a/packages/hooks/src/useRequest/useRequest.ts +++ b/packages/hooks/src/useRequest/useRequest.ts @@ -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 ? R @@ -34,8 +34,11 @@ export type PluginsMiddleOptionsType< export function useRequest< TData, TParams extends unknown[] = unknown[], - PluginsOptions extends UseRequestPlugin[] = UseRequestPlugin[], - SR = any + PluginsOptions extends UseRequestPlugin[] = UseRequestPlugin< + TData, + TParams + >[], + SR = any, >( service: UseRequestService, options: UseRequestOptionsWithFormatResult< @@ -46,14 +49,31 @@ export function useRequest< > & UseRequestOptionsWithInitialData, plugins?: PluginsOptions, -): useRequestResult +): useRequestResult< + TData, + TParams, + UseRequestOptionsWithFormatResult< + TData, + TParams, + PluginsMiddleOptionsType, + SR + >['formatResult'], + UseRequestOptionsWithInitialData< + TData, + TParams, + PluginsMiddleOptionsType + >['initialData'] +> // 只有 formatResult export function useRequest< TData, TParams extends unknown[] = unknown[], - PluginsOptions extends UseRequestPlugin[] = UseRequestPlugin[], - SR = any + PluginsOptions extends UseRequestPlugin[] = UseRequestPlugin< + TData, + TParams + >[], + SR = any, >( service: UseRequestService, options: UseRequestOptionsWithFormatResult< @@ -63,13 +83,26 @@ export function useRequest< SR >, plugins?: PluginsOptions, -): useRequestResult +): useRequestResult< + TData, + TParams, + UseRequestOptionsWithFormatResult< + TData, + TParams, + PluginsMiddleOptionsType, + SR + >['formatResult'], + false +> // 只有 initialData export function useRequest< TData, TParams extends unknown[] = unknown[], - PluginsOptions extends UseRequestPlugin[] = UseRequestPlugin[] + PluginsOptions extends UseRequestPlugin[] = UseRequestPlugin< + TData, + TParams + >[], >( service: UseRequestService, options: UseRequestOptionsWithInitialData< @@ -78,13 +111,25 @@ export function useRequest< PluginsMiddleOptionsType >, plugins?: PluginsOptions, -): useRequestResult +): useRequestResult< + TData, + TParams, + false, + UseRequestOptionsWithInitialData< + TData, + TParams, + PluginsMiddleOptionsType + >['initialData'] +> // 无 formatResults 和 initialData export function useRequest< TData, TParams extends unknown[] = unknown[], - PluginsOptions extends UseRequestPlugin[] = UseRequestPlugin[] + PluginsOptions extends UseRequestPlugin[] = UseRequestPlugin< + TData, + TParams + >[], >( service: UseRequestService, options?: UseRequestOptions< @@ -93,12 +138,15 @@ export function useRequest< PluginsMiddleOptionsType >, plugins?: PluginsOptions, -): useRequestResult +): useRequestResult export function useRequest< TData, TParams extends unknown[] = unknown[], - PluginsOptions extends UseRequestPlugin[] = UseRequestPlugin[] + PluginsOptions extends UseRequestPlugin[] = UseRequestPlugin< + TData, + TParams + >[], >( service: UseRequestService, options?: UseRequestOptions< @@ -120,10 +168,14 @@ export function useRequest< useRetryPlugin, ]?.filter(Boolean) - return withArgs(useRequestImplement, options?.use)(service, options, [ - ...(plugins || []), - ...BuiltInPlugins, - ] as UseRequestPlugin[]) + return withArgs(useRequestImplement, options?.use)( + service, + options, + [...(plugins || []), ...BuiltInPlugins] as UseRequestPlugin< + TData, + TParams + >[], + ) } export default useRequest