- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在《走进开源工程-urlcat》中,对工程整体进行了分析,对如何做开源也有了 进一步的了解,该篇再深入研究下〃儿比源码。
该工程到底做了什么?
// 常规写法一 const APIJJRL = s://api.cxaMp(e /;fiAi^ctio^. getUseirPosts(id, blogld, offset) {
const request Uri =、于{APLURL}/〃scd/${id}/勿。gs/${勿。g/d}/posts?〃nAit =$= ${offse±F;
// send request)
// 常规写法二 const APLURL = 1 s://api.exai^\ple.coWz;fiAnction getUserPosts(id)blogld^ limit, offset) {
co八st escape41d = c八codeURCoM?oncnt(7d);
const escapedBlogld = ei^codeURICoi^poi^e^t(bloglcC);
const patl^\ = /〃seKS/${esca?cdld}/勿ogs/${csca?cdB/og/dF;
co八优 uH =八ew URL(p4Mb AP/_(JRL);
urlsearch =八ew URLSearchParai^s([ (iMit, offset ));
const 丫equcstUH = urLhref;
// send request)
// 使用 uirlcat 之后的写法 c。八st AP/JJRL 二么ftps://”画.0X4^/?.,。^/;心八出。八 getUse丫Posts(id)li^v\it, offset) {
cov\st vequestU” = urlcat(API_URLJ 7users/:id/posts1, {offset ));
if (tgpcof pathTe^plateOrPara^s === Ktr证g){
co^st baseUiri = baseUrlOrTiexpiate;
coinst pathTei^plate = pathTe^plateOrPara^;
coi^st params = i^aybeParakv\$;
return udcatl^p^patKre^plate, params, bascUH, config);
} else (
cov\st baseTei^\plate = bascUHOrTexpiate;
coinst p4raMs = pathTe^plateOrParai^s;
return urlcatlkv\pl(haseTekv\plate, params, 6mdefMcd, co八fig);
))
这局部代码是利用Typescript定义重载函数类型,采用连续多个重载声明+ 一 个函数实现的方式来实现,其作用是为了保证在调用该函数时,函数的参数及返 回值都要兼容所有的重载。
例如下列图,第三个参数类型在重载函数类型中并不存在。
import urlcat
import urlcat from *./test1;
const API_URL = s :〃api.example
类型string”的梦数不能赋给类型“ParamMap”的参数.
台糟问题没有可用的快速修复
urlcat(API_URL, */users/:id/posts1t ,211);第三段
以下代码是核心,作者通过职责别离的方式,将核心方法代码简化。
// 核心方法 function urlcatli^\pl(
pathTeMpSte: string,
paira^: Para^Map,
baseUH: string | a八defined,
config: UrlCatCoinfigiAratioiri){
// 第一步 path(7users/:id/posts1, { id: 1? /imit: 3(9 })返回 〃/aseKs/l/posts〃 和 lii^it: 30
cov^st { reiaderedPath,忆侬〃证以gPa忆3s } = path(pathTeMp(atc, params);
//第二步 移除Mull或者U八dcfMcd属性
const dea^Parai^s 二 reMoveNullOrU^de^rei^ai^i^gPara^);
// 第三步{(i*it: 30)转 li^v\it=3O
const re八deredQacrg = q“crg(c/c〃八4Ms, config);
// 第四步 拼接返回 /〃scd/1/?osts?it=:3。
const
文档评论(0)