Skip to content

Commit 4d8ec80

Browse files
committed
fix: data 不支持对象以外的类型
1 parent d714ed2 commit 4d8ec80

File tree

12 files changed

+282
-155
lines changed

12 files changed

+282
-155
lines changed

src/adapter.ts

Lines changed: 79 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,14 @@ import {
1111
AxiosRequestHeaders,
1212
} from './core/Axios';
1313

14+
/**
15+
* 适配器请求类型
16+
*/
1417
export type AxiosAdapterRequestType = 'request' | 'download' | 'upload';
1518

19+
/**
20+
* 适配器请求方法
21+
*/
1622
export type AxiosAdapterRequestMethod =
1723
| 'OPTIONS'
1824
| 'GET'
@@ -24,8 +30,19 @@ export type AxiosAdapterRequestMethod =
2430
| 'TRACE'
2531
| 'CONNECT';
2632

33+
/**
34+
* 适配器请求数据
35+
*/
36+
export type AxiosAdapterRequestData = string | AnyObject | ArrayBuffer;
37+
38+
/**
39+
* 适配器响应数据
40+
*/
2741
export type AxiosAdapterResponseData = string | ArrayBuffer | AnyObject;
2842

43+
/**
44+
* 适配器响应体
45+
*/
2946
export interface AxiosAdapterResponse extends AnyObject {
3047
/**
3148
* 状态码
@@ -45,6 +62,9 @@ export interface AxiosAdapterResponse extends AnyObject {
4562
data: AxiosAdapterResponseData;
4663
}
4764

65+
/**
66+
* 适配器错误体
67+
*/
4868
export interface AxiosAdapterResponseError extends AnyObject {
4969
/**
5070
* 状态码
@@ -64,6 +84,9 @@ export interface AxiosAdapterResponseError extends AnyObject {
6484
data?: AnyObject;
6585
}
6686

87+
/**
88+
* 适配器请求配置
89+
*/
6790
export interface AxiosAdapterRequestConfig extends AnyObject {
6891
/**
6992
* 请求类型
@@ -84,7 +107,7 @@ export interface AxiosAdapterRequestConfig extends AnyObject {
84107
/**
85108
* 请求数据
86109
*/
87-
data?: AnyObject;
110+
data?: AxiosAdapterRequestData;
88111
/**
89112
* 请求头
90113
*/
@@ -111,37 +134,61 @@ export interface AxiosAdapterRequestConfig extends AnyObject {
111134
fail(error: AxiosAdapterResponseError): void;
112135
}
113136

137+
/**
138+
* 请求函数基本选项
139+
*/
114140
export interface AxiosAdapterBaseOptions extends AxiosAdapterRequestConfig {
115141
header?: AxiosRequestHeaders;
116142
success(response: AxiosAdapterResponse): void;
117143
fail(error: AxiosAdapterResponseError): void;
118144
}
119145

146+
/**
147+
* 请求函数选项
148+
*/
120149
export type AxiosAdapterRequestOptions = AxiosAdapterBaseOptions;
121150

151+
/**
152+
* 下载函数选项
153+
*/
154+
export interface AxiosAdapterDownloadOptions extends AxiosAdapterBaseOptions {
155+
filePath?: string;
156+
}
157+
158+
/**
159+
* 上传函数选项
160+
*/
122161
export interface AxiosAdapterUploadOptions
123162
extends AxiosAdapterBaseOptions,
124163
AxiosRequestFormData {
125164
fileName: string;
126165
formData?: AnyObject;
127166
}
128167

129-
export interface AxiosAdapterDownloadOptions extends AxiosAdapterBaseOptions {
130-
filePath?: string;
131-
}
132-
168+
/**
169+
* 请求函数
170+
*/
133171
export interface AxiosAdapterRequest {
134-
(config: AxiosAdapterRequestOptions): AxiosAdapterTask;
172+
(config: AxiosAdapterRequestOptions): AxiosAdapterPlatformTask;
135173
}
136174

137-
export interface AxiosAdapterUpload {
138-
(config: AxiosAdapterUploadOptions): AxiosAdapterTask;
175+
/**
176+
* 下载函数
177+
*/
178+
export interface AxiosAdapterDownload {
179+
(config: AxiosAdapterDownloadOptions): AxiosAdapterPlatformTask;
139180
}
140181

141-
export interface AxiosAdapterDownload {
142-
(config: AxiosAdapterDownloadOptions): AxiosAdapterTask;
182+
/**
183+
* 上传函数
184+
*/
185+
export interface AxiosAdapterUpload {
186+
(config: AxiosAdapterUploadOptions): AxiosAdapterPlatformTask;
143187
}
144188

189+
/**
190+
* 适配器平台
191+
*/
145192
export interface AxiosAdapterPlatform {
146193
/**
147194
* 发送请求
@@ -157,7 +204,10 @@ export interface AxiosAdapterPlatform {
157204
upload: AxiosAdapterUpload;
158205
}
159206

160-
export type AxiosAdapterTask =
207+
/**
208+
* 适配器平台请求任务
209+
*/
210+
export type AxiosAdapterPlatformTask =
161211
| undefined
162212
| void
163213
| {
@@ -166,10 +216,16 @@ export type AxiosAdapterTask =
166216
offProgressUpdate?(callback: AxiosProgressCallback): void;
167217
};
168218

219+
/**
220+
* 适配器函数
221+
*/
169222
export interface AxiosAdapter {
170-
(config: AxiosAdapterRequestConfig): AxiosAdapterTask;
223+
(config: AxiosAdapterRequestConfig): AxiosAdapterPlatformTask;
171224
}
172225

226+
/**
227+
* 获取支持的平台适配器
228+
*/
173229
export function getDefaultAdapter() {
174230
const platform = revisePlatformApiNames(getPlatform());
175231

@@ -220,13 +276,20 @@ export function getDefaultAdapter() {
220276
return createAdapter(platform);
221277
}
222278

279+
/**
280+
* 创建适配器
281+
*
282+
* @param platform 平台 API 对象
283+
*/
223284
export function createAdapter(platform: AxiosAdapterPlatform) {
224285
assert(isPlainObject(platform), 'platform 不是一个 object');
225286
assert(isFunction(platform.request), 'request 不是一个 function');
226287
assert(isFunction(platform.upload), 'upload 不是一个 function');
227288
assert(isFunction(platform.download), 'download 不是一个 function');
228289

229-
function adapter(config: AxiosAdapterRequestConfig): AxiosAdapterTask {
290+
function adapter(
291+
config: AxiosAdapterRequestConfig,
292+
): AxiosAdapterPlatformTask {
230293
const baseOptions = transformOptions(config);
231294

232295
switch (config.type) {
@@ -242,14 +305,14 @@ export function createAdapter(platform: AxiosAdapterPlatform) {
242305
function processRequest(
243306
request: AxiosAdapterRequest,
244307
baseOptions: AxiosAdapterBaseOptions,
245-
): AxiosAdapterTask {
308+
): AxiosAdapterPlatformTask {
246309
return request(baseOptions);
247310
}
248311

249312
function processUpload(
250313
upload: AxiosAdapterUpload,
251314
baseOptions: AxiosAdapterBaseOptions,
252-
): AxiosAdapterTask {
315+
): AxiosAdapterPlatformTask {
253316
const { name, filePath, fileType, ...formData } =
254317
baseOptions.data as AxiosRequestFormData;
255318
const options = {
@@ -273,7 +336,7 @@ export function createAdapter(platform: AxiosAdapterPlatform) {
273336
function processDownload(
274337
download: AxiosAdapterDownload,
275338
baseOptions: AxiosAdapterBaseOptions,
276-
): AxiosAdapterTask {
339+
): AxiosAdapterPlatformTask {
277340
const options: AxiosAdapterDownloadOptions = {
278341
...baseOptions,
279342
filePath: baseOptions.params?.filePath,

src/axios.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,29 @@ import { mergeConfig } from './core/mergeConfig';
1010
import { createAdapter } from './adapter';
1111
import defaults from './defaults';
1212

13+
/**
14+
* axios 实例默认配置
15+
*/
1316
export interface AxiosInstanceDefaults extends AxiosRequestConfig {
1417
/**
1518
* 请求头
1619
*/
1720
headers: Required<AxiosRequestHeaders>;
1821
}
1922

23+
/**
24+
* axios 实例
25+
*/
2026
export interface AxiosInstance extends AxiosDomainRequest, Axios {
2127
/**
2228
* 默认请求配置
2329
*/
2430
defaults: AxiosInstanceDefaults;
2531
}
2632

33+
/**
34+
* axios 静态对象
35+
*/
2736
export interface AxiosStatic extends AxiosInstance {
2837
/**
2938
* Axios 类
@@ -44,11 +53,11 @@ export interface AxiosStatic extends AxiosInstance {
4453
*/
4554
createAdapter: typeof createAdapter;
4655
/**
47-
* 判断 Cancel
56+
* 传入取消请求错误返回 true
4857
*/
4958
isCancel: typeof isCancel;
5059
/**
51-
* 判断 AxiosError
60+
* 传入响应错误返回 true
5261
*/
5362
isAxiosError: typeof isAxiosError;
5463
}

src/core/Axios.ts

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { isFunction, isPromise, isString } from '../helpers/isTypes';
55
import {
66
AxiosAdapter,
77
AxiosAdapterRequestMethod,
8-
AxiosAdapterTask,
8+
AxiosAdapterPlatformTask,
99
AxiosAdapterRequestConfig,
1010
AxiosAdapterResponseData,
1111
} from '../adapter';
@@ -14,9 +14,11 @@ import { mergeConfig } from './mergeConfig';
1414
import { CancelToken } from './cancel';
1515
import { dispatchRequest } from './dispatchRequest';
1616
import { AxiosTransformer } from './transformData';
17-
1817
import AxiosDomain from './AxiosDomain';
1918

19+
/**
20+
* 请求方法
21+
*/
2022
export type AxiosRequestMethod =
2123
| AxiosAdapterRequestMethod
2224
| 'options'
@@ -29,6 +31,9 @@ export type AxiosRequestMethod =
2931
| 'trace'
3032
| 'connect';
3133

34+
/**
35+
* 请求头
36+
*/
3237
export interface AxiosRequestHeaders extends AnyObject {
3338
/**
3439
* 通用请求头
@@ -68,6 +73,9 @@ export interface AxiosRequestHeaders extends AnyObject {
6873
connect?: AnyObject;
6974
}
7075

76+
/**
77+
* 表单数据(上传会用到)
78+
*/
7179
export interface AxiosRequestFormData extends AnyObject {
7280
/**
7381
* 文件名
@@ -79,10 +87,23 @@ export interface AxiosRequestFormData extends AnyObject {
7987
filePath: string;
8088
}
8189

82-
export type AxiosRequestData = AnyObject | AxiosRequestFormData;
90+
/**
91+
* 请求数据
92+
*/
93+
export type AxiosRequestData =
94+
| string
95+
| AnyObject
96+
| ArrayBuffer
97+
| AxiosRequestFormData;
8398

99+
/**
100+
* 响应数据
101+
*/
84102
export type AxiosResponseData = undefined | number | AxiosAdapterResponseData;
85103

104+
/**
105+
* 监听进度回调事件对象
106+
*/
86107
export interface AxiosProgressEvent {
87108
/**
88109
* 下载进度
@@ -98,10 +119,21 @@ export interface AxiosProgressEvent {
98119
totalBytesExpectedToSend: number;
99120
}
100121

122+
/**
123+
* 监听进度回调
124+
*/
101125
export interface AxiosProgressCallback {
102-
(event: AxiosProgressEvent): void;
126+
(
127+
/**
128+
* 事件对象
129+
*/
130+
event: AxiosProgressEvent,
131+
): void;
103132
}
104133

134+
/**
135+
* 请求配置
136+
*/
105137
export interface AxiosRequestConfig
106138
extends Partial<
107139
Omit<AxiosAdapterRequestConfig, 'type' | 'success' | 'fail'>
@@ -176,6 +208,9 @@ export interface AxiosRequestConfig
176208
validateStatus?: (status: number) => boolean;
177209
}
178210

211+
/**
212+
* 响应体
213+
*/
179214
export interface AxiosResponse<
180215
TData extends AxiosResponseData = AxiosResponseData,
181216
> extends AnyObject {
@@ -202,9 +237,12 @@ export interface AxiosResponse<
202237
/**
203238
* 请求任务
204239
*/
205-
request?: AxiosAdapterTask;
240+
request?: AxiosAdapterPlatformTask;
206241
}
207242

243+
/**
244+
* 错误体
245+
*/
208246
export interface AxiosResponseError extends AnyObject {
209247
/**
210248
* 状态码
@@ -233,9 +271,12 @@ export interface AxiosResponseError extends AnyObject {
233271
/**
234272
* 请求任务
235273
*/
236-
request?: AxiosAdapterTask;
274+
request?: AxiosAdapterPlatformTask;
237275
}
238276

277+
/**
278+
* Axios 构造函数
279+
*/
239280
export interface AxiosConstructor {
240281
new (config: AxiosRequestConfig): Axios;
241282
}

0 commit comments

Comments
 (0)