我封装来一个类,里面有get(), post(), put(), delete()四个方法,且每个方法都有很多参数
interface fetchParam {
(
url: string,
params?: string | object | [],
alwaysBack?: boolean,
options?: object,
resolveResult?: boolean,
): {}
}
class Request {
constructor() {}
fetchApi(url, method, params, alwaysBack, options, resolveResult) {
return new Promise((res, rej) => {
// do somthing
})
}
get(url, params, alwaysBack, options, resolveResult) {
return this.fetchApi(url, 'get', params, alwaysBack, options, resolveResult)
}
post(url, params, alwaysBack, options, resolveResult) {
return this.fetchApi(url, 'post', params, alwaysBack, options, resolveResult)
}
put(url, params, alwaysBack, options, resolveResult) {
return this.fetchApi(url, 'put', params, alwaysBack, options, resolveResult)
}
delete(url, params, alwaysBack, options, resolveResult) {
return this.fetchApi(url, 'delete', params, alwaysBack, options, resolveResult)
}
}
我并不想用这种方式约束函数参数, 因为这样会很繁琐
get(url: string, params?: string | object | [], alwaysBack?: boolean) {
// do somthing
}
定义类型本来就是个繁琐的事情,如果你觉得这么多参数太复杂,也可以采用对象参数啊,比如
不过这种方式会改变调用接口(函数签名)
还有一种变通的方法,定义一个函数类型,然后把 get 等定义成这个函数类型的成员
这个定义在
this.fetchApi(url, "get", ...rest)
这里会出错,因为fetchApi
没有兼容的定义,所以要改,把 fetchApi 定义成fetchApi(...args: any[])
。这种方式显然对外部调用不友好(不能提示参数),所以fetchApi
要定义成protected
或者private
的,内部调用,同时通过重载定义一个友好的接口想了想,最后还是补一句,用类型系统,就不要怕定义麻烦!!!