/** * Created by rockyl on 2023/3/23. */ import { CodeError } from "./CodeError"; export interface FetchContext { /**api链接*/ url: string; /**传入的原始api链接*/ originUrl: string; /**参数*/ opts: RequestInit; /**响应数据*/ respObject: any; /**网络错误*/ netError: CodeError; /**响应体错误*/ responseError: CodeError; } /** * 响应体解析方法 */ export type ResponseParseFunc = (respObject: any) => { success: boolean; code?: number | string; message?: string; data?: any; }; /** * 错误信息解析方法 */ export type ErrorMessageParseFunc = (respObject: any) => string; /** * 调用api接口的参数 */ export interface CallApiOptions { /**请求方法, 默认:'GET'*/ method?: 'GET' | 'POST' | 'DELETE' | 'PUT'; /**头信息*/ headers?: HeadersInit; /** * 数据 * @desc 如果是字符串则直接使用,如果是数组则会通过'&'符号拼接,如果是对象则会转成querystring */ params?: any; /**路径参数*/ pathParams?: any; /**请求体类型,默认:'json'*/ requestContentType?: 'form-data' | 'form-urlencoded' | 'json' | 'raw' | 'binary'; /**响应体类型,默认:'json'*/ responseContentType?: 'json' | 'blob' | 'text' | 'arrayBuffer' | 'formData'; /**插件集合*/ plugins?: Plugin[]; /**响应体解析方法,默认为`code/data`的风格*/ parseResponseFunc?: ResponseParseFunc; /**错误信息解析方法*/ errorMessageParseFunc?: ErrorMessageParseFunc; /**遇到错误时是否抛出异常,默认:true*/ throwError?: boolean; /**是否使用bigint,默认:false*/ useBigint?: boolean; /**请求中断信号*/ signal?: AbortSignal; /**扩展参数*/ extOptions?: any; /**自定义fetch方法*/ customFetch?: typeof fetch; } /** * api方法额外类型集 */ export interface EasyApiFunc { /**原始api链接*/ url: string; } /** * 轮询api接口的参数 */ export interface PollingApiOptions { /**间隔,默认:1000ms*/ interval?: number; /**次数,小于0表示无限轮询,大于0表示有限次数轮询,等于0表示不请求也不轮询,默认:-1*/ times?: number; /**消息回调方法,如果方法返回true则终止轮询*/ onResponse?: (data: T) => boolean | void; /**当轮询次数走完时触发*/ onOutOfTimes?: () => void; /**错误回调方法,如果方法返回true则继续轮询,优先级高于interruptWhenError*/ onError?: (error: Error | CodeError) => boolean | void; /**当发生错误时终止轮训,默认:true*/ interruptWhenError?: boolean; } /** * 插件 */ export interface Plugin { /**请求初始化*/ init?: (context: FetchContext, extOptions?: any) => boolean | void; /**请求前*/ beforeCall?: (context: FetchContext, extOptions?: any) => boolean | void; /**遇到网络错误*/ onCatchNetError?: (context: FetchContext, extOptions?: any) => boolean | void; /**请求后*/ afterCall?: (context: FetchContext, extOptions?: any) => boolean | void; /**请求成功后*/ afterCallSuccess?: (context: FetchContext, extOptions?: any) => boolean | void; /**遇到接口错误*/ onCatchError?: (context: FetchContext, extOptions?: any) => boolean | void; } export interface ApiConfig { path: string; method?: string; [key: string]: ApiConfig | string; }