diff --git a/src/core/config.ts b/src/core/config.ts index 42e11b3..353035e 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -54,13 +54,23 @@ export type BaseOptions = GlobalOptions & { refreshDeps?: WatchSource[]; cacheKey?: string; queryKey?: (...args: P) => string; - onSuccess?: (data: R, params: P) => void; + onSuccess: (data: R, params: P) => void; onError?: (error: Error, params: P) => void; }; +const FRPlaceholderType = Symbol('FR'); +export type FRPlaceholderType = typeof FRPlaceholderType; + +// temporary fix: https://github.com/AttoJS/vue-request/issues/31 +// When `formatResult` and `onSuccess` are used at the same time +// the type of the parameter `data` of `onSuccess` is temporarily set to `any` export type FormatOptions = { formatResult: (data: R) => FR; -} & BaseOptions; + onSuccess?: ( + data: FR extends FRPlaceholderType ? any : FR, + params: P, + ) => void; +} & Omit, 'onSuccess'>; export type MixinOptions = | BaseOptions diff --git a/src/useLoadMore.ts b/src/useLoadMore.ts index 8f57b05..2e47c29 100644 --- a/src/useLoadMore.ts +++ b/src/useLoadMore.ts @@ -2,6 +2,7 @@ import { computed, inject, ref, Ref, watchEffect } from 'vue'; import { BaseOptions, FormatOptions, + FRPlaceholderType, getGlobalOptions, GlobalOptions, GLOBAL_OPTIONS_PROVIDE_KEY, @@ -59,7 +60,7 @@ function useLoadMore< function useLoadMore< R, P extends unknown[] = any, - FR = any, + FR = FRPlaceholderType, LR extends unknown[] = any[] >( service: LoadMoreService, diff --git a/src/usePagination.ts b/src/usePagination.ts index 83ad91f..b7c68af 100644 --- a/src/usePagination.ts +++ b/src/usePagination.ts @@ -2,6 +2,7 @@ import { computed, inject, Ref } from 'vue'; import { BaseOptions, FormatOptions, + FRPlaceholderType, getGlobalOptions, GlobalOptions, GLOBAL_OPTIONS_PROVIDE_KEY, @@ -47,7 +48,7 @@ export type PaginationMixinOptions = function usePagination( service: IService, ): PaginationResult; -function usePagination( +function usePagination( service: IService, options: PaginationFormatOptions, ): PaginationResult; diff --git a/src/useRequest.ts b/src/useRequest.ts index 8969c99..e5b4d69 100644 --- a/src/useRequest.ts +++ b/src/useRequest.ts @@ -1,4 +1,9 @@ -import { BaseOptions, FormatOptions, MixinOptions } from './core/config'; +import { + BaseOptions, + FormatOptions, + FRPlaceholderType, + MixinOptions, +} from './core/config'; import useAsyncQuery, { BaseResult } from './core/useAsyncQuery'; import generateService from './core/utils/generateService'; import { IService } from './core/utils/types'; @@ -10,7 +15,7 @@ export interface RequestResult function useRequest( service: IService, ): RequestResult; -function useRequest( +function useRequest( service: IService, options: FormatOptions, ): RequestResult;