diff --git a/packages/integrations/useAxios/index.ts b/packages/integrations/useAxios/index.ts index 4cce277a487..680437932f0 100644 --- a/packages/integrations/useAxios/index.ts +++ b/packages/integrations/useAxios/index.ts @@ -4,11 +4,11 @@ import { isString, until } from '@vueuse/shared' import type { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse, CancelTokenSource } from 'axios' import axios from 'axios' -export interface UseAxiosReturn { +export interface UseAxiosReturn, D = any> { /** * Axios Response */ - response: ShallowRef | undefined> + response: ShallowRef /** * Axios response data @@ -74,17 +74,17 @@ export interface UseAxiosReturn { */ isCanceled: Ref } -export interface StrictUseAxiosReturn extends UseAxiosReturn { +export interface StrictUseAxiosReturn extends UseAxiosReturn { /** * Manually call the axios request */ - execute: (url?: string | AxiosRequestConfig, config?: AxiosRequestConfig) => PromiseLike> + execute: (url?: string | AxiosRequestConfig, config?: AxiosRequestConfig) => PromiseLike> } -export interface EasyUseAxiosReturn extends UseAxiosReturn { +export interface EasyUseAxiosReturn extends UseAxiosReturn { /** * Manually call the axios request */ - execute: (url: string, config?: AxiosRequestConfig) => PromiseLike> + execute: (url: string, config?: AxiosRequestConfig) => PromiseLike> } export interface UseAxiosOptions { /** @@ -99,21 +99,21 @@ export interface UseAxiosOptions { */ shallow?: boolean } -type OverallUseAxiosReturn = StrictUseAxiosReturn | EasyUseAxiosReturn +type OverallUseAxiosReturn = StrictUseAxiosReturn | EasyUseAxiosReturn -export function useAxios(url: string, config?: AxiosRequestConfig, options?: UseAxiosOptions): StrictUseAxiosReturn & PromiseLike> -export function useAxios(url: string, instance?: AxiosInstance, options?: UseAxiosOptions): StrictUseAxiosReturn & PromiseLike> -export function useAxios(url: string, config: AxiosRequestConfig, instance: AxiosInstance, options?: UseAxiosOptions): StrictUseAxiosReturn & PromiseLike> -export function useAxios(config?: AxiosRequestConfig): EasyUseAxiosReturn & PromiseLike> -export function useAxios(instance?: AxiosInstance): EasyUseAxiosReturn & PromiseLike> -export function useAxios(config?: AxiosRequestConfig, instance?: AxiosInstance): EasyUseAxiosReturn & PromiseLike> +export function useAxios, D = any>(url: string, config?: AxiosRequestConfig, options?: UseAxiosOptions): StrictUseAxiosReturn & PromiseLike> +export function useAxios, D = any>(url: string, instance?: AxiosInstance, options?: UseAxiosOptions): StrictUseAxiosReturn & PromiseLike> +export function useAxios, D = any>(url: string, config: AxiosRequestConfig, instance: AxiosInstance, options?: UseAxiosOptions): StrictUseAxiosReturn & PromiseLike> +export function useAxios, D = any>(config?: AxiosRequestConfig): EasyUseAxiosReturn & PromiseLike> +export function useAxios, D = any>(instance?: AxiosInstance): EasyUseAxiosReturn & PromiseLike> +export function useAxios, D = any>(config?: AxiosRequestConfig, instance?: AxiosInstance): EasyUseAxiosReturn & PromiseLike> /** * Wrapper for axios. * * @see https://vueuse.org/useAxios */ -export function useAxios(...args: any[]): OverallUseAxiosReturn & PromiseLike> { +export function useAxios, D = any>(...args: any[]): OverallUseAxiosReturn & PromiseLike> { const url: string | undefined = typeof args[0] === 'string' ? args[0] : undefined const argsPlaceholder = isString(url) ? 1 : 0 let defaultConfig: AxiosRequestConfig = {} @@ -166,15 +166,15 @@ export function useAxios(...args: any[]): OverallUseAxiosRetur isFinished.value = !loading } const waitUntilFinished = () => - new Promise>((resolve, reject) => { + new Promise>((resolve, reject) => { until(isFinished).toBe(true) // eslint-disable-next-line @typescript-eslint/no-use-before-define .then(() => resolve(result)) .catch(reject) }) - const then: PromiseLike>['then'] = (onFulfilled, onRejected) => + const then: PromiseLike>['then'] = (onFulfilled, onRejected) => waitUntilFinished().then(onFulfilled, onRejected) - const execute: OverallUseAxiosReturn['execute'] = (executeUrl: string | AxiosRequestConfig | undefined = url, config: AxiosRequestConfig = {}) => { + const execute: OverallUseAxiosReturn['execute'] = (executeUrl: string | AxiosRequestConfig | undefined = url, config: AxiosRequestConfig = {}) => { error.value = undefined const _url = typeof executeUrl === 'string' ? executeUrl @@ -192,7 +192,7 @@ export function useAxios(...args: any[]): OverallUseAxiosRetur return { then } } if (options.immediate && url) - (execute as StrictUseAxiosReturn['execute'])() + (execute as StrictUseAxiosReturn['execute'])() const result = { response, @@ -209,7 +209,7 @@ export function useAxios(...args: any[]): OverallUseAxiosRetur isCanceled: isAborted, abort, execute, - } as OverallUseAxiosReturn + } as OverallUseAxiosReturn return { ...result,