Skip to content

类型定义

核心类型

Service<TData, TParams>

请求服务函数类型

typescript
type Service<TData, TParams extends any[]> = (...args: TParams) => Promise<TData>;

Options<TData, TParams>

useRequest 的配置项类型

typescript
interface Options<TData, TParams extends any[]> {
  // 基本配置
  manual?: boolean;
  initialData?: TData;
  defaultParams?: TParams;

  // 生命周期
  onBefore?: (params: TParams) => void;
  onSuccess?: (data: TData, params: TParams) => void;
  onError?: (e: Error, params: TParams) => void;
  onFinally?: (params: TParams, data?: TData, e?: Error) => void;

  // 插件相关配置
  throttleInterval?: number;
  debounceInterval?: number;
  pollingInterval?: number;
  cacheKey?: string;
  cacheTime?: number;
  staleTime?: number;
  retryCount?: number;
}

Result<TData, TParams>

useRequest 的返回值类型

typescript
interface Result<TData, TParams extends any[]> {
  // 请求状  loading: Ref<boolean>;
  data: Ref<TData | undefined>;
  error: Ref<Error | undefined>;

  // 请求方法
  run: (...args: TParams) => void;
  runAsync: (...args: TParams) => Promise<TData>;
  cancel: () => void;

  // 插件方法
  [key: string]: any;
}

Plugin<TData, TParams>

插件类型

typescript
interface Plugin<TData, TParams extends any[]> {
  (
    fetchInstance: Fetch<TData, TParams>,
    options: Options<TData, TParams>,
  ): {
    onBefore?: (params: TParams) => void;
    onSuccess?: (data: TData, params: TParams) => void;
    onError?: (e: Error, params: TParams) => void;
    onFinally?: (params: TParams, data?: TData, e?: Error) => void;
    onCancel?: () => void;
    [key: string]: any;
  };
}

缓存

typescript
interface CachePluginOptions<TData, TParams> {
  cacheKey?: string;
  staleTime?: number;
}

防抖

typescript
interface DebouncePluginOptions {
  debounceInterval?: number;
}

轮询

typescript
interface PollingPluginOptions {
  pollingInterval?: number;
  pollingWhenHidden?: boolean;
}

重试

typescript
interface RetryPluginOptions {
  retryCount?: number;
  retryInterval?: number | ((retryCount: number) => number);
}

节流

typescript
interface ThrottlePluginOptions {
  throttleInterval?: number;
}

工具类型

Ref<T>

Vue 的响应式引用类型

typescript
type Ref<T> = import('vue').Ref<T>;

CachedData<TData, TParams>

缓存数据类型

typescript
interface CachedData<TData, TParams> {
  data: TData;
  params: TParams;
  time: number;
}

使用示例

自定义插

typescript
import { Plugin } from '@pluve/use-request-vue';

const useCustomPlugin: Plugin<any, any> = (fetchInstance, options) => {
  return {
    onBefore: (params) => {
      console.log('请求开, params);
    },
    onSuccess: (data, params) => {
      console.log('请求成功', data, params);
    },
    onError: (error, params) => {
      console.error('请求失败', error, params);
    },
    onFinally: (params, data, error) => {
      console.log('请求结束', { params, data, error });
    },
    onCancel: () => {
      console.log('请求取消');
    },
  };
};

export default useCustomPlugin;

类型断言

typescript
import  useRequest  from '@pluve/use-request-vue';

interface User {
  id: number;
  name: string;
  email: string;
}

// 指定请求参数和响应数据类const { data, run } = useRequest<User, [string, number]>(
  (name: string, age: number) =>
    fetch(`/api/users?name=${name}&age=${age}`)
      .then(res => res.json() as Promise<User>)
);

// 调用时会有类型检run('John', 30);