/* eslint @typescript-eslint/no-empty-interface: 0 */ import useBaseRequest from '@ahooksjs/use-request'; import type { BaseOptions, BasePaginatedOptions, BaseResult, CombineService, LoadMoreFormatReturn, LoadMoreOptions, LoadMoreOptionsWithFormat, LoadMoreParams, OptionsWithFormat, PaginatedFormatReturn, PaginatedOptionsWithFormat, PaginatedParams } from '@ahooksjs/use-request/lib/types'; import request from './request'; type OmitBaseResult = Omit, 'run'>; interface IceBaseResult extends OmitBaseResult { request: (...args: P) => Promise; } interface IceLoadMoreResult extends OmitBaseResult> { } interface IcePaginatedResult extends OmitBaseResult, PaginatedParams> { } function useRequest( service: CombineService, options: OptionsWithFormat ): IceBaseResult function useRequest( service: CombineService, options?: BaseOptions ): IceBaseResult function useRequest( service: CombineService>, options: LoadMoreOptionsWithFormat ): IceLoadMoreResult function useRequest( service: CombineService>, options: LoadMoreOptions ): IceLoadMoreResult function useRequest( service: CombineService, options: PaginatedOptionsWithFormat ): IcePaginatedResult function useRequest( service: CombineService, PaginatedParams>, options: BasePaginatedOptions ): IcePaginatedResult function useRequest(service: any, options: any = {}) { const { run, ...rest } = useBaseRequest(service, { // Note: // ahooks/useRequest manual 默认为 false 即自动请求 // icejs/useRequest 默认为手动请求 // 避免发生 breakchange 这里将 manual 默认改为 true manual: true, // 默认使用 request 作为请求方法 requestMethod: request, ...options, }); return { // 修改 ahooks/useRequest 的返回值 run 为 request request: run, ...rest }; } export default useRequest;