专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

TypeScript的枚举与类型约束

  上一章我们讲了TS的接口
  这一章,我们就来聊一聊TS的枚举和约束枚举认识枚举
  在很多计算机语言中都有枚举的概念,但是JS中是没有枚举这个概念的,为了弥补这个缺憾在TS加入了枚举类型
  什么是枚举呢?
  枚举(meiju):枚举的意思就是一一列举,把所有情况都列举出来,那么取值的时候,只有这几个可以使用,其他的都不行
  计算机语言里面的枚举(enumerations):把所有的常量放在一个集合内,让若干个常量变成一组有关联的内容
  针对一个业务逻辑,我需要频繁用到四个方向的字符串constUPupconstRIGHTrightconstDOWNdownconstLEFTleft
  对于以上四个变量来说
  我不管做任何逻辑,我没办法限制你只能使用这四个变量中的一个封装一个功能函数functionutil(dir){}
  不管用什么方法,你都没办法限制这个dir参数接收到的必须是上面列出的四个方向
  这个时候,我们就可以用到枚举了
  首先,在TS中,利用enum关键字创建一个枚举集合,把我们需要的四个常量放进去enumDirection{UPup,RIGHTright,DOWNdown,LEFTleft}
  制作了一个DIrection枚举集合,那么就可以用这个集合来对某些数据进行限制了functionutil(dir:Direction){}
  这就约定了,dir这个参数的值只能是Direction这个枚举集合里面的常量,其他都不行
  只要你写的不是Direction这个枚举内的内容都不行数字枚举
  数字枚举:枚举类型中的每一个常量都是数字
  在TS中,枚举内的每一个常量,当你不设置值的时候,默认就是number类型enumPages{ONE,0TWO,1THREE2}
  你在枚举内的常量,第一个默认值是0,后面的依次1递增
  此时
  Pages。ONE0
  Pages。TWO1
  Pages。THREE2
  我们也可以自己指定值enumPages{ONE10,10TWO20,20THREE3030}
  这个时候枚举集合内的常量就是我们指定好的值
  我们也可以指定部分值enumPages{ONE10,10TWO,11THREE12}
  指定常量后面的未指定常量,就会按照1的规则一次递增
  enumPages{ONE,0TWO10,10THREE11}enumPages{ONE,0TWO10,10THREE,11FOUR30,30FIVE31}字符串枚举
  字符串枚举:枚举集合中的每一个常量的值都是string类型
  在TS内,你必须要指定一个值,才可能会出现string类型enumDirection{UPup,RIGHTright,DOWNdown,LEFTleft}
  在TS中,枚举常量和任何内容都是不一样的,包括原始字符串functionutil(dir:Direction){}
  这是因为,在TS中,枚举内的每一个常量都是一个独一无二的值
  所以当你用枚举去限定一个数据的时候,用的时候也只能用枚举内的值
  这样也避免你因为手误出现的单词错误,比如你会不会认为form和from是一个单词呢异构枚举
  异构枚举:其实就是在一个枚举集合内同时混合了数字枚举和字符串枚举
  但是你大概率是不会这样使用的,因为我们作为一组数据的集合,一般不会把数字和字符串混合在一起使用enumInfo{ONE,UPup,TWO2,LEFTleft}
  在这里有一个点需要注意
  因为在枚举集合内,当某一个key你没有设置值的时候,会默认按照上一个的值1
  所以如果前一个是字符串枚举,那么下一个必须要手动赋值,不然会报错
  如果前一个是数字枚举,那么下一个可以不必要手动赋值,会按照上一个1计算枚举合并
  在TS内的枚举,是支持合并的
  多个枚举类型可以分开书写,会在编译的时候自动合并enumDirection{UPup,RIGHTright,DOWNdown,LEFTleft}enumDirection{TOPtop,BOTTOMbottom}functionutil(dir:Direction){}util(Direction。BOTTOM)util(Direction。LEFT)
  这里定义的两个枚举都叫做Direction,会在编译的时候自动放在一起,不会出现冲突反向映射
  TS内的数字枚举,在编译的时候,会同时将key和value分别颠倒编译一次enumPages{ONE,0TWO,1THREE2}
  以这个为例,他是如何进行编译的呢varPages;(function(Pages){Pages〔Enum〔ONE〕0〕ONEPages〔Enum〔TWO〕1〕TWOPages〔Enum〔THREE〕2〕THREE})(Pages(Pages{}));
  编译完毕的结果Pages{ONE:0,TWO:1,THREE:2,0:ONE,1:TWO,2:THREE}
  也就是说,我们在TS内使用的时候,如果是数字枚举
  那么我们可以通过key得到对应的数字,也可以通过对应的数字得到对应的keyenumPages{ONE,0TWO,1THREE2}console。log(Pages。ONE)0console。log(Pages。TWO)1console。log(Pages。THREE)2console。log(Pages〔0〕)ONEconsole。log(Pages〔1〕)TWOconsole。log(Pages〔2〕)THREE常量枚举
  常量枚举,是在枚举的基础上再加上const关键字来修饰
  会在编译的时候,把枚举内容删除,只保留编译结果
  并且对于数字枚举来说,不在支持反向映射能力,只能利用key来访问
  非常量枚举enumPages{ONE,0TWO,1THREE2}console。log(Pages。ONE)console。log(Pages。TWO)console。log(Pages。THREE)
  编译完毕的js文件
  常量枚举constenumPages{ONE,0TWO,1THREE2}console。log(Pages。ONE)console。log(Pages。TWO)console。log(Pages。THREE)
  编译完毕的js文件
  类型约束
  在TS中,还有一个很神奇的关键字,叫做type
  type又叫做类型别名有很多神奇的功能,不仅能支持interface定义的对象结构,还支持任何手写类型
  先来看一个很简单的例子
  letn1:numberstringbooleanletn2:numberstringbooleanletn3:numberstringboolean
  观察上面一段代码,我们定义了n1和n2和n3三个变量
  对于类型的限制都是number或者string或者boolean
  写起来的时候就非常麻烦
  这个时候,我们就可以使用type对其进行别名设置typeInfonumberstringbooleanletn1:Infoletn2:Infoletn3:Info
  这样一来,我们的代码是不是变得简洁了起来
  可能小伙伴们认为这个用的并不多,但是type也不是只有这一个功能type的常见使用
  基本类型的别名typennumberletnum:n100
  这是一个非常基础的使用,把number这个类型起了一个别名叫做n
  今后再用n来限制变量的时候,其实就是在使用number
  基本类型联合typeinumberstringletstr:i千锋大前端str100
  这就是联合类型,那number或者string这个类型齐了一个别名叫做i
  我们再用i来限制变量的时候,这个变量就被限制为了number或者string
  对象类型typeUser{name:string,age:number}letperson:User{name:千锋大前端,age:10}
  这就是对象类型,和interface很像,用处基本一致
  对象联合类型typeUser{name:string,age:number}typePersonUser{gender:boolean}letperson:Person{name:千锋大前端,age:10,gender:true}
  这就是对象联合类型,和interface的extends继承很像
  元组类型typedata〔number,string〕letinfo:data〔10,千锋大前端〕
  常量限定typecoloryelloworangebluefunctionutil(c:color){}util(yellow)
  这个color被限定为了几个值,将来用color去约束一个变量的时候
  这个变量只能接受这几个值,这里和enum比较像了
  type和interface的共同点
  1。都可以约束对象或者函数类型
  interfaceinterfaceUser{name:string;age:number}interfaceFunc{(x:number):number}
  typetypeUser{name:string;age:number}typeFunc(x:number)number
  我们看到,两个定义方式略有区别,但是后期用法基本一致
  2。扩展类型
  interface使用extends进行继承interfacePerson{name:stringage:number}使用extends关键字继承自PersoninterfaceStudentextendsPerson{classRoom:number}lets:Student{name:千锋大前端,age:10,classRoom:1}
  type使用交叉()来实现typePerson{name:stringage:number}使用交叉()typeStudentPerson{classRoom:number}lets:Student{name:千锋大前端,age:10,classRoom:1}
  3。联合类型
  interface使用extends继承typetypePerson{name:stringage:number}使用extends关键字继承自PersoninterfaceStudentextendsPerson{classRoom:number}lets:Student{name:千锋大前端,age:10,classRoom:1}
  type使用交叉()扩展interfaceinterfacePerson{name:stringage:number}使用交叉()typeStudentPerson{classRoom:number}lets:Student{name:千锋大前端,age:10,classRoom:1}type和interface的区别
  1。interface支持多次声明自动合并,type不支持interfaceUser{name:stringage:number}interfaceUser{classRoom:string}真实的User接口{name:stringage:numberclassRoom:string}
  type如果声明重名标识符会报错
  2。对于ES6模块化语法的默认导出语法
  interface支持声明的同时进行默认导出exportdefaultinterfaceUser{name:stringage:number}
  type必须先声明,在默认导出typeUser{name:stringage:number}exportdefaultUser
  必须要先声明好,在进行默认导出,如果直接连写默认导出,会报错
  3。type可以使用typeof关键字去获取某一数据类型letboxdocument。querySelector(。box)typeEleTypetypeofbox
  这里定义了一个EleType标识符,会自动根据typeof关键字检测的box的类型限制
  4。type支持使用in关键字去遍历成映射类型typenamesfirstNamelastNameAKAtypenameType{〔keyinnames〕:string}真实的nameType类型{firstName:stringlastName:stringAKA:string}

中国热度神州同庆陈晓磐在了解秋收情况。杨光摄安吉茶农在白茶园中劳作。潘学康摄阜康抽水蓄能电站施工现场。马晓霞摄洛古河夫妻警务室民警为界碑描红。孙铂程摄海口市江东新区一项目工地,工人在安装外墙玻璃。急速爆发的全新赛道,代糖,受到元气森林和喜茶等网红企业追捧点赞了的2022发财,关注的年年发大财!本文是价值事务所的原创文章第1095篇。文章仅记录价值事务所思想,不构成投资建议,作者没有群不收费荐股不代客理财。都知道医疗是极好的赛道,各待遇好!中国女篮广州海景房隔离,每顿4荤1素海鲜管够,怕吃胖健身10月15日消息,近日,中国女篮首批队员已经从澳大利亚悉尼载誉回国,目前她们正在广州接受隔离,姑娘们纷纷晒出了隔离生活,住的是海景房,吃的是广州美食,有的看球,有的训练,非常开心!英超最新积分榜热刺赢球落后阿森纳1分,森林8轮不胜仍旧垫底昨晚今晨,英超联赛第11轮继续激战,热刺主场20完胜埃弗顿,距离榜首阿森纳只差1分,凯恩和霍伊别尔分别破门,热刺创造队史英超同期积分纪录诺丁汉森林客场01输给狼队,连续8轮不胜,继公牛签下安特托昆博,保罗加盟森林狼格林加盟篮网的交易建议北京时间10月16日,随着新赛季的即将到来,季前赛也慢慢的进入了尾声,联盟各支对自己阵容不是太满意的球队仍然继续进行调整,就在刚刚过去的一天,联盟又有5笔签约正式完成,而据美媒建议浙江海岛共富观察海上古村如何革新?大鹏岛一景。金塘管委会供图中新网舟山10月15日电(林波王晗璐张艇马乾伦)在位于浙江省舟山市定海区的大鹏岛,随处可见的小岛你好标识带来的新风尚。这座拥有浙江省级历史文化名村头衔并入林志玲老公终于现身!穿西装出席活动变得好帅,林志玲近况却老了林志玲的日本老公Akira已经跟随林志玲来到台湾定居,在10月14号,Akira出席了台湾地区的活动,这也是他首次的亮相,而让人比较意外的是,他的人气真的太高了,在现场活动中一直都600万台!苹果揭开遮羞布,外媒华为翻盘的机会来了点击关注,每天精彩不断!导读600万台!苹果揭开遮羞布,外媒华为翻盘的机会来了苹果公司作为全球有名的科技巨头企业,在整个高端手机市场上,苹果几乎是一家独大的,几乎没有谁能与苹果一较10万以内的新能源车,为什么首选小蚂蚁?10万以内的新能源车,为什么首选小蚂蚁?想买一辆10万以内的新能源车,应该怎么选择?首先要考虑平台和车身材质。什么样的平台好呢?当然是纯电平台,是专门为新能源车打造,目前最先进的新关于OPPOReno6Pro和OPPOReno8Pro的硬件配置参数对比OPPOReno6ProOPPOReno8Pro性能骁龙870LPDDR4XUFS3。1天玑8100MAXLPDDR5UFS3。1屏幕6。55英寸90HzAMOLED柔性曲面屏分辨诺基亚4G手机C31上架,到手价869元,采用久违的后背指纹识别器提起诺基亚,大家可能想到之前的N9手机,还有再之前的E71,而最近几年,在Nokia9PureView之后,新机大多都是500元以内的功能机了,就是系统都不是安卓的。不过,这次诺基
一定要去!这个地方过年好热闹!达州全记录!不定期送福利!灯火辉煌耀达城火树银花不夜天正月初一达川区三里古街新春彩灯游乐美食嘉年华迎来客流高峰游客数量突破了8000人次一周吸引了2万市民体验游玩据悉,本次灯会是一采摘鲜果看古树瀑布赏岭南古风建筑春节就到肇庆这个地方玩吧!肇庆德庆县位于粤中西部西江中游北岸,是拥有2100多年历史的岭南古郡,名胜古迹和景区景点众多。今天,我们就来看看都有哪些好玩好吃的吧玩柑香画廊旅游线路图源德庆发布线路特色线路位于德海南这个地方,很少有人空手走出去春节期间去哪逛?活动多促销多的海南离岛免税店别错过记者1月19日从海南省商务部门和离岛免税店了解到,海南12家离岛免税店携手通过线上线下形式为消费者送上春节消费大礼包,丰富多彩的主泰国这个地方,传说是男人的天堂,实际却是少女的噩梦泰国有处地方,男游客称为旅游天堂,但对某些少女来说,这里堪比地狱。如果要把东南亚国家排名,百分之80的人都会把泰国放在首位,虽然越南,缅甸,老挝也是值得一去的国家,但相比泰国还是有免费赏花灯!济南这个地方不容错过!还有文艺汇演年货大集春节的脚步临近印象济南泉世界热闹的年味已经快要溢出屏幕花灯瑞兔人潮满含多少浪漫与憧憬2023年1月15日3月15日第二届泉城最美花灯会满满元气迎兔年摄影刘银刚花灯会结合兔年生肖与泉张灯结彩添喜庆,欢声笑语度新春,泸州这个地方春节要你好看头条创作挑战赛寻找小组生活家泸州头条一路耍VOL050期文字王木木图片王木木引子随着管理的细化,这些年的忠山公园,其实已经和记忆里的模样有所不同。今年春节,泸州忠山公园,装扮一新目春节期间,泗洪洪泽湖湿地景区门票免费了扬子晚报网1月20日讯(通讯员张同远费梅记者高峰)春节期间,国家5A景区洪泽湖湿地景区推出了免费入园等一系列特色旅游和惠民活动,让市民在家门口就能享受到独具特色的年味儿。大型红色实过春节讲中文,这个地方却不属于中国在中国边境,生活着这样的一群人他们讲着汉语,使用人民币,却不是中国人,这里就是中缅边境的果敢。果敢地区原为中国领土,隶属中国云南省。1897年,中英双方在北京重议边界问题,英国强迫2023年,我建议您不要提前还房贷头条创作挑战赛纵观整个2022年,提早还贷潮在各大银行舒展,不少客户想提前还房贷,都被银行告知需要预约与排队,有些客户以致也曾排到了下一年,事态真是相称嵬峨。这种趋向,也顺遂递延到电子烟公司Juul陷入困境寻求帮助份额下降,支出增加蓝洞新消费报道,1月28日消息,据外电报道,美国电子烟品牌JuulLabs已经与至少三大烟草公司进行了讨论,试图制定出一种重振这家资金短缺的电子烟制造商的计划。但会谈仍处于初期阶段铜精矿市场定价面面观来源矿业界我国是铜消费大国,铜精矿是金属铜的关键原材料,研究铜精矿定价机制,对保障我国经济稳定发展具有重要意义。一全球铜矿定价与市场基本情况(一)全球铜精矿定价逐渐由厂商定价政府定
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网