城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

TypeScript中函数重载写法,你在第几层

8月28日 皇极城投稿
  大多数函数接受一组固定的参数。
  但有些函数可以接受可变数量的参数,不同类型的参数,甚至可以根据你调用函数的方式返回不同的类型。为了注释这样的函数,TypeScript提供了函数重载功能。1。函数签名
  我们先来考虑一个函数,它返回给一个特定的人的问候信息。functiongreet(person:string):string{returnHello,{person}!;}
  上面的函数接受1个字符类型的参数:人的名字。调用该函数是非常简单的:greet(World);Hello,World!
  如果你想让greet()函数更加灵活,怎么办?例如,让它另外接受一个要问候的人的列表。
  这样的函数将接受一个字符串或字符串数组作为参数,并返回一个字符串或字符串数组。
  如何对这样的函数进行注释?有2种方法。
  第一种方法很简单,就是通过更新参数和返回类型直接修改函数签名。下面重构后greet()的样子:functiongreet(person:stringstring〔〕):stringstring〔〕{if(typeofpersonstring){returnHello,{person}!;}elseif(Array。isArray(person)){returnperson。map(nameHello,{name}!);}thrownewError(Unabletogreet);}
  现在我们可以用两种方式调用greet():greet(World);Hello,World!greet(〔小智,大冶〕);〔Hello,小智!,Hello,大冶!〕
  直接更新函数签名以支持多种调用方式是一种常见的好方法。
  然而,在某些情况下,我们可能需要采用另一种方法,分别定义你的函数可以被调用的所有方式。这种方法被称为函数重载。2。函数重载
  第二种方法是使用函数重载功能。当函数签名相对复杂且涉及多种类型时,我推荐使用这种方法。
  定义函数重载需要定义重载签名和一个实现签名。
  重载签名定义函数的形参和返回类型,没有函数体。一个函数可以有多个重载签名:对应于调用该函数的不同方式。
  另一方面,实现签名还具有参数类型和返回类型,而且还有实现函数的主体,且只能有一个实现签名。重载签名functiongreet(person:string):functiongreet(persons:string〔〕):string〔〕;实现签名functiongreet(person:unknown):unknown{if(typeofpersonstring){returnHello,{person}!;}elseif(Array。isArray(person)){returnperson。map(nameHello,{name}!);}thrownewError(Unabletogreet);}
  greet()函数有两个重载签名和一个实现签名。
  每个重载签名都描述了可以调用该函数的一种方式。就greet()函数而言,我们可以用两种方式调用它:用一个字符串参数,或用一个字符串数组参数。
  实现签名functiongreet(person:unknown):unknown{。。。}包含了该函数如何工作的适当逻辑。
  现在,和上面一样,可以用字符串或字符串数组类型的参数来调用greet()。greet(World);Hello,World!greet(〔小智,大冶〕);〔Hello,小智!,Hello,大冶!〕2。1重载签名是可调用的
  虽然实现签名实现了函数行为,但是它不能直接调用。只有重载签名是可调用的。greet(World);重载签名可调用greet(〔小智,大冶〕);重载签名可调用constsomeValue:unknownUgreet(someValue);ImplementationsignatureNOTcallable报错Nooverloadmatchesthiscall。Overload1of2,(person:string):string,gavethefollowingerror。Argumentoftypeunknownisnotassignabletoparameteroftypestring。Overload2of2,(persons:string〔〕):string〔〕,gavethefollowingerror。Argumentoftypeunknownisnotassignabletoparameteroftypestring〔〕。
  在上面的示例中,即使实现签名接受unknown参数,也不能使用类型为unknown(greet(someValue))的参数调用greet()函数。2。1实现签名必须是通用的重载签名functiongreet(person:string):functiongreet(persons:string〔〕):string〔〕;此重载签名与其实现签名不兼容。实现签名functiongreet(person:unknown):string{。。。thrownewError(Unabletogreet);}
  重载签名函数greet(person:string〔〕):string〔〕被标记为与greet(person:unknown):string不兼容。
  实现签名的string返回类型不够通用,不能与重载签名的string〔〕返回类型兼容。3。方法重载
  虽然在前面的例子中,函数重载被应用于一个普通函数。但是我们也可以重载一个方法
  在方法重载区间,重载签名和实现签名都是类的一部分了。
  例如,我们实现一个Greeter类,有一个重载方法greet()。classGreeter{message:constructor(message:string){this。}重载签名greet(person:string):greet(persons:string〔〕):string〔〕;实现签名greet(person:unknown):unknown{if(typeofpersonstring){return{this。message},{person}!;}elseif(Array。isArray(person)){returnperson。map(name{this。message},{name}!);}thrownewError(Unabletogreet);}
  Greeter类包含greet()重载方法:2个重载签名描述如何调用该方法,以及包含正确实现的实现签名
  由于方法重载,我们可以用两种方式调用hi。greet():使用一个字符串或使用一个字符串数组作为参数。consthinewGreeter(Hi);hi。greet(小智);Hi,小智!hi。greet(〔王大冶,大冶〕);〔Hi,王大冶!,Hi,大冶!〕4。何时使用函数重载
  函数重载,如果使用得当,可以大大增加可能以多种方式调用的函数的可用性。这在自动补全时特别有用:我们会在自动补全中列出所有可能的重载记录。
  然而,在某些情况下,建议不要使用函数重载,而应该使用函数签名。
  例如,不要对可选参数使用函数重载:不推荐做法functionmyFunc():functionmyFunc(param1:string):functionmyFunc(param1:string,param2:string):functionmyFunc(。。。args:string〔〕):string{implementation。。。}
  在函数签名中使用可选参数是足够的:推荐做法functionmyFunc(param1?:string,param2:string):string{implementation。。。}5。总结
  TypeScript中的函数重载让我们定义以多种方式调用的函数。
  使用函数重载需要定义重载签名:一组带有参数和返回类型的函数,但没有主体。这些签名表明应该如何调用该函数。
  此外,你必须写出函数的正确实现(实现签名):参数和返回类型,以及函数体。请注意,实现签名是不可调用的。
  除了常规的函数之外,类中的方法也可以重载。
  作者:dmitripavlutin译者:前端小智来源:dmitripavlutin原文:https:dmitripavltin。comtyperiptfunctionoverloading
投诉 评论 转载

麒麟5G芯片用完了?曝华为Mate50首发骁龙8984G,明在热闹的旗舰市场,华为因为进入了m国的黑名单,旗下自研芯片紧缺导致了各种机型难产,甚至变卖了子品牌荣耀。今年也终于在7月份发布了旗舰P50系列,但由于芯片的原因,该系列在5G时……滴滴打车18块,回来出租车13块,同样的路程,还要滴滴吗?网约车应该比出租车贵点,形成差异经营,都有饭吃滴滴说涨价就涨价,出租车涨价刘挨喷滴滴后台收费比出租贵,早就不打滴滴了有优惠卷比正规出租车便宜,没卷一般都会比正……每日资讯人均万物互联?oppo上线跨屏互联据有关消息称,OPPO在近日上线了一个跨屏互联的功能,类似于华为的跨屏协作与小米的MIUI。图片来自网络从官网的信息来看,这一功能与目前市面上的华为小米的互联相似,……TypeScript中函数重载写法,你在第几层大多数函数接受一组固定的参数。但有些函数可以接受可变数量的参数,不同类型的参数,甚至可以根据你调用函数的方式返回不同的类型。为了注释这样的函数,TypeScript提供了……苹果CEO库克薪酬曝光!2021年,他还多赚了这些据了解,库克的基本工资与前两年相比没有变化,仍为300万美元,变化最大的是获得了8230万美元的股票报酬。除此之外,库克还拿到1200万美元非股权激励薪酬和138万美元其它报酬……一起教育科技(YQ。US)宣布关停K12校外学科培训全面转型12月7日,一起教育科技(YQ。US)在北京正式宣布:将在12月31日停止其在中国K12阶段的学科类校外培训服务。未来,一起教育科技将更加专注作业等核心教学应用场景,全面转型成……4月即将发布的五款手机,最高支持150W快充,哪款会让你换机大家好,我是三月。一转眼四月份悄无声息的已经到来了,本以为三月份的封校之后就能正常生活了,没想到仅仅只放了一个清明假,四月又开始了封校生活,大家还是要多多注意不乱跑好好防……大公司早报好丽友再发声明否认涨价和配料双标苹果暂停在俄销售产(整理卢思叶)今天是3月2日星期三,过去的二十四小时有这些大公司动态可以关注:德邦回应被京东收购传闻;好丽友再发声明,称未涨价,也不存在配料双标;苹果公司宣布暂停在俄销售……JS,Vue2,data的写法对象式和函数式,el(elemVue说明Vue2,data的两种写法对象式和函数式,当使用组件时必须使用函数式,否则报错。Vue2,el(element)的两种写法1、newVue(……比特币监管风暴来临!币圈投资人何去何从?投资人ken观点最强监管来袭,加密货币投资市场归于平静!近期国内对与加密货币投资监管有趋严的趋势,甚至不排除封杀比特币等的政策出台!从三协会公告对比特币进行定性,并……有多少人信了读书不如去打工?读书不如去打工,读书开始是挣不到钱的,还要花钱,最少书要花钱买的。打工是打一天工挣一天钱的,能不能拿到是另外一回事。读书是可以挣长远的,不要挺卖力气的钱,有可能岁数越大挣……华为mate40EPro消息,看起来可能使用麒麟9000l处最近出现了一个消息,华为可能要发布一款新手机,买这个手机是mate40EPro,使用麒麟9000l处理器?麒麟9000l处理器看起来是真的有?不知道真假,至少现在已经曝光……
数字孪生技术与工程实践全套PPT(共计7章,287页)首销5分钟卖33万台,天玑9000120W,还买什么real腾讯不靠游戏,还能靠什么?强悍实力联想拯救者2Pro手把手教你安装系统让你也成为装机大神!(四)未上市造车新势力融资暗战正酣车企纷纷加码新能源车中端市场美国再次行动,目标对准了脱离华为的荣耀C语言进阶04预防检测及消除bug被罚2200万元,网商银行须守好互联网金融安全防线腾讯QQ扩列正式上线,网友戏称自己年轻了10岁真香红米K50真机曝光,64MP主摄,前摄超小开孔,价格十分松下RF3700收音机评测,它值60到70欧元吗?
保温杯放中药能放多久保温杯放中药能放多长时间推荐小学运动会作文500字五篇距甲方向盘锁怎么样揭秘无崖子、李秋水和天山童姥的师傅究竟是谁唐鉴军有公司给我三年五个亿,我拒绝了,永远不会背叛赵本山清洗电脑键盘需要注意什么事项分包合同电影釜山行23个细节,多处细节或许都令人你意想不到喜报!喜报!北京卫视5部作品荣获第32届中国新闻奖体内有肿块怎么办?不良的饮食作息导致了甲状腺结节盯上你陌上花儿缓缓开李四光的妻子是谁李四光是如何与许淑彬相识的

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁