117 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
		
		
			
		
	
	
			117 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
|  | type AnyObject = Record<string | number | symbol, any> | |||
|  | type HttpPromise<T> = Promise<HttpResponse<T>>; | |||
|  | type Tasks = UniApp.RequestTask | UniApp.UploadTask | UniApp.DownloadTask | |||
|  | export interface RequestTask { | |||
|  |   abort: () => void; | |||
|  |   offHeadersReceived: () => void; | |||
|  |   onHeadersReceived: () => void; | |||
|  | } | |||
|  | export interface HttpRequestConfig<T = Tasks> { | |||
|  |   /** 请求基地址 */ | |||
|  |   baseURL?: string; | |||
|  |   /** 请求服务器接口地址 */ | |||
|  |   url?: string; | |||
|  | 
 | |||
|  |   /** 请求查询参数,自动拼接为查询字符串 */ | |||
|  |   params?: AnyObject; | |||
|  |   /** 请求体参数 */ | |||
|  |   data?: AnyObject; | |||
|  | 
 | |||
|  |   /** 文件对应的 key */ | |||
|  |   name?: string; | |||
|  |   /** HTTP 请求中其他额外的 form data */ | |||
|  |   formData?: AnyObject; | |||
|  |   /** 要上传文件资源的路径。 */ | |||
|  |   filePath?: string; | |||
|  |   /** 需要上传的文件列表。使用 files 时,filePath 和 name 不生效,App、H5( 2.6.15+) */ | |||
|  |   files?: Array<{ | |||
|  |     name?: string; | |||
|  |     file?: File; | |||
|  |     uri: string; | |||
|  |   }>; | |||
|  |   /** 要上传的文件对象,仅H5(2.6.15+)支持 */ | |||
|  |   file?: File; | |||
|  | 
 | |||
|  |   /** 请求头信息 */ | |||
|  |   header?: AnyObject; | |||
|  |   /** 请求方式 */ | |||
|  |   method?: "GET" | "POST" | "PUT" | "DELETE" | "CONNECT" | "HEAD" | "OPTIONS" | "TRACE" | "UPLOAD" | "DOWNLOAD"; | |||
|  |   /** 如果设为 json,会尝试对返回的数据做一次 JSON.parse */ | |||
|  |   dataType?: string; | |||
|  |   /** 设置响应的数据类型,支付宝小程序不支持 */ | |||
|  |   responseType?: "text" | "arraybuffer"; | |||
|  |   /** 自定义参数 */ | |||
|  |   custom?: AnyObject; | |||
|  |   /** 超时时间,仅微信小程序(2.10.0)、支付宝小程序支持 */ | |||
|  |   timeout?: number; | |||
|  |   /** DNS解析时优先使用ipv4,仅 App-Android 支持 (HBuilderX 2.8.0+) */ | |||
|  |   firstIpv4?: boolean; | |||
|  |   /** 验证 ssl 证书 仅5+App安卓端支持(HBuilderX 2.3.3+) */ | |||
|  |   sslVerify?: boolean; | |||
|  |   /** 跨域请求时是否携带凭证(cookies)仅H5支持(HBuilderX 2.6.15+) */ | |||
|  |   withCredentials?: boolean; | |||
|  | 
 | |||
|  |   /** 返回当前请求的task, options。请勿在此处修改options。 */ | |||
|  |   getTask?: (task: T, options: HttpRequestConfig<T>) => void; | |||
|  |   /**  全局自定义验证器 */ | |||
|  |   validateStatus?: (statusCode: number) => boolean | void; | |||
|  | } | |||
|  | export interface HttpResponse<T = any> { | |||
|  |   config: HttpRequestConfig; | |||
|  |   statusCode: number; | |||
|  |   cookies: Array<string>; | |||
|  |   data: T; | |||
|  |   errMsg: string; | |||
|  |   header: AnyObject; | |||
|  | } | |||
|  | export interface HttpUploadResponse<T = any> { | |||
|  |   config: HttpRequestConfig; | |||
|  |   statusCode: number; | |||
|  |   data: T; | |||
|  |   errMsg: string; | |||
|  | } | |||
|  | export interface HttpDownloadResponse extends HttpResponse { | |||
|  |   tempFilePath: string; | |||
|  | } | |||
|  | export interface HttpError { | |||
|  |   config: HttpRequestConfig; | |||
|  |   statusCode?: number; | |||
|  |   cookies?: Array<string>; | |||
|  |   data?: any; | |||
|  |   errMsg: string; | |||
|  |   header?: AnyObject; | |||
|  | } | |||
|  | export interface HttpInterceptorManager<V, E = V> { | |||
|  |   use( | |||
|  |     onFulfilled?: (config: V) => Promise<V> | V, | |||
|  |     onRejected?: (config: E) => Promise<E> | E | |||
|  |   ): void; | |||
|  |   eject(id: number): void; | |||
|  | } | |||
|  | export abstract class HttpRequestAbstract { | |||
|  |   constructor(config?: HttpRequestConfig); | |||
|  |   config: HttpRequestConfig; | |||
|  |   interceptors: { | |||
|  |     request: HttpInterceptorManager<HttpRequestConfig, HttpRequestConfig>; | |||
|  |     response: HttpInterceptorManager<HttpResponse, HttpError>; | |||
|  |   } | |||
|  |   middleware<T = any>(config: HttpRequestConfig): HttpPromise<T>; | |||
|  |   request<T = any>(config: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>; | |||
|  |   get<T = any>(url: string, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>; | |||
|  |   upload<T = any>(url: string, config?: HttpRequestConfig<UniApp.UploadTask>): HttpPromise<T>; | |||
|  |   delete<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>; | |||
|  |   head<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>; | |||
|  |   post<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>; | |||
|  |   put<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>; | |||
|  |   connect<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>; | |||
|  |   options<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>; | |||
|  |   trace<T = any>(url: string, data?: AnyObject, config?: HttpRequestConfig<UniApp.RequestTask>): HttpPromise<T>; | |||
|  | 
 | |||
|  |   download(url: string, config?: HttpRequestConfig<UniApp.DownloadTask>): Promise<HttpDownloadResponse>; | |||
|  | 
 | |||
|  |   setConfig(onSend: (config: HttpRequestConfig) => HttpRequestConfig): void; | |||
|  | } | |||
|  | 
 | |||
|  | declare class HttpRequest extends HttpRequestAbstract { } | |||
|  | export default HttpRequest; |