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

ts类型断言(二)

8月8日 观潮阁投稿
  一、将任何一个类型断言为any
  ts的类型系统运转良好,每个值类型都具体而精确。当我们引用一个在此类型上不存在的属性或方法时,就会报错:constnum:number1num。length1error:Propertylengthdoesnotexistontypenumber
  上面的例子中,数字类型的变量num是没有length属性的,故ts给出了相应的错误提示。
  但有的时候,我们非常确定这段代码不会出错,比如下面这个例子:window。num1error:PropertynumdoesnotexistontypeWindowtypeofglobalThis
  上面的例子中,我们需要将window。上添加一个属性num,但ts编译时会报错,提示我们window上不存在nun属性。此时我们可以使用asany临时将window断言为any类型(windowasany)。num1;
  在any类型的变量上,访问任何属性都是允许的。
  注意:将一个变量断言为any可以说是解决ts中类型问题的最后一个手段。它极有可能掩盖了真正的类型错误。如果不是非常确定,就不要使用asany
  我们不能滥用asany,也不要否定它的作用
  二、将any断言为一个具体的类型
  在开发中,我们不可避免需要处理any类型的变量,它们可能是由于第三方库未能定义好自己的类型,也有可能是历史遗留的或其他人编写的烂代码,还可能是受到ts类型系统的限制而无法精确定义类型的场景。
  遇到any类型的变量时,我们可以选择无视它,任由它滋生更多的any。
  我们也可以选择改进它,通过类型断言及时把any断言为精确的类型,亡羊补牢,使我们的代码向着高可维护性的目标发展。
  例如项目之前定义了一个getCalander,它的返回值是any:constgetCalander(key:string):any{return(windowasany)。cache〔key〕;}
  那么我们在使用它时,最好能够将调用了它之后的返回值断言成一个精确的类型,这样就方便了后续的操作:
  选择语言constgetCalander(key:string):any{return(windowasany)。cache〔key〕;}interfaceCalanderType{date:callCurrentData():}constgetCurrentDateCalanderType(20220503)asCalanderTgetCurrentDate。run();
  上面的例子中,我们调用完getCalander之后,将它断言为CalanderType类型,从而明确getCurrentDate的类型,后续对getCurrentDate的访问时就有了代码补全,提高承俄码以可维护性。
  三、类型断言的限制
  根据之前的例子,我们可以得出:
  1、联合类型可以被断言为其中一个类型
  2、父类可以被断言为子类
  3、任何类型都可以被断言为any
  4、any可以被断言为任何类型
  那么类型断言有没有什么限制呢?是不是任何一个类型都可以被断言为任何另一个类型呢?
  其实并不是任何一个类型都可以被断言为任何另一个类型。
  具体来说,若A兼容B,那么A能够被断言为B,B也能被断言为A。
  下面我们通过一个简化的例子,来理解类型断言的限制:interfaceAnimal{name:}interfacePeople{name:run():}constAnimal1(animal:Animal){return(animalasPeople);}constisMySelf(mySelf:People){return(mySelfasAnimal);}
  上例是可以断言的,我们再看看下面的栗子:interfaceAnimal{name:}interfacePeople{run():}constAnimal1(animal:Animal){return(animalasPeople);}constisMySelf(mySelf:People){return(mySelfasAnimal);}
  这个时候会提示错误,两者不能充分重叠,这意味要想断言成功,还必须具备有一个条件:
  即:要使得A能够被断言为B,只需要A兼容B或B兼容A即可
  四、双重断言(不建议使用)
  任何类型都可以被断言为any,any可以被断言为任何类型
  那么我们是不是可以使用双重断言xxxasanyasxxx将任何一个类型断言为任何另一个类型呢?interfacePeople{run():}interfaceFish{swim():}constisPeople(mySelf:People){return(mySelfasanyasFish);}
  在上面的例子中,若直接使用mySelfasFish肯定会报错,因为mySelf和Fish互相都不兼容。
  若使用双重断言,则可以打破要使得A能够被断言为B,只需要A兼容B或B兼容A即可的限制,将任何一个类型断言为任何另一个类型到若你使用了这种双重断言,那么十有八九是非常错误的,它很可能会导致运行时错误。
投诉 评论 转载

余承东发话后,雷军正式表态,外媒又一个华为?文C君科讯排版C君科讯头条号原创文章,禁止抄袭,违者必究余承东发话2021年一篇题为《跌倒华为,吃饱苹果》的博文在网络上发酵,该篇文章通过对比近两年iPhone在全……一文了解视频会议类型,适合的才是最好的谈及远程会议,想必大多数人是存在或多或少的疑问:远程会议现在应用范围广吗?远程会议指的是视频会议?不同企业应该怎么选择适合自己的视频会议?我的公司规模不大,用视频会议是否显得大……讲真的,美版手机靠谱嘛?美版手机与国行手机区别还是有一点的1,保值率,卖二手的时候美版掉价更狠2,用材,美版屏幕供应商与国内的不太一样3,锁,有的带锁,不要买,要考虑无锁的,无锁的使……ts类型断言(二)一、将任何一个类型断言为anyts的类型系统运转良好,每个值类型都具体而精确。当我们引用一个在此类型上不存在的属性或方法时,就会报错:constnum:number1nu……央媒怒批未成年采取租号形式玩腾讯游戏,腾讯的回复有点敷衍只要思想不滑坡,办法总比困难多。世人皆知,腾讯游戏在国内拥有极大的影响力,腾讯游戏在为腾讯带来极大的财力之时,也为腾讯公司带来了一系列负面影响。前段时间,网络游戏的……降级的大厂年终奖去年一台华为手机,今年文化衫加自热火锅本文来源:时代周报作者:郭梓昊石恩泽大厂的年终奖有多疯狂?12月8日,一位认证信息为某大厂员工的用户在社交平台发文称:听来的各大厂今年的年终奖,有点卷起来的意思了,……NVIDIAOmniverse在GTC22上有哪些更新?在创建和连接虚拟世界方面,已有超过15万人下载NVIDIAOmniverse,从而在助力3D设计工作流转型方面实现巨大飞跃,将物理属性准确的实时仿真提升到新高度。在GTC……直降600元华为P50Pro线下发力,较劲iPhone13众所周知,华为手机有两大旗舰系列,一个是主打高端商务旗舰的Mate系列手机,另一个就是主打高端影像旗舰的P系列手机,两者虽然定位不尽相同,但是却拥有相同水准的性能值,因此这两款……目前有什么系统能像IOS一样不卡顿?感谢您的阅读!WP,和IOS一样不卡顿的只有WP!我一直觉得WindowsPhone生不逢时,如果能多些支持,WindowsPhone系统一定可以和IOS系统媲美!……微信被单删了?使用这款检测神器,看看你有多少表面好友微信可以说是我们日常生活使用得最多的社交软件了。而作为一款社交软件,社交聊天是微信的主要功能,但在使用微信时我们难免会遇到一些尴尬的场景。俗话说单删不可怕,谁先被删……鸿蒙OS第6批升级名单来了包含21款华为荣耀老机型9月8日,华为正式开启了HarmonyOS2。0鸿蒙系统第6批内测升级名单,在已公布的第6批鸿蒙OS升级名单中,包含大批华为与荣耀的老机型。根据名单显示,此次可参与第6批……EDA投资大热,华为一口气投了4家,国产EDA奋起直追近日,华为哈勃又投资一家EDA公司,这已经是其投资的第四家EDA公司,分别是阿卡思微、九同方微电子、无锡飞谱电子、立芯软件。近年来,除了华为哈勃,其他资本也积极投向EDA……
认养一头牛完成B轮融资将加强优质奶源牧场和数智化产业链建设工信部谈2022年工业经济稳定运行制造业迈向中高端,5G基站别再用错误的关机方式,伤害你心爱的电脑了vivo稳居世界前五,登顶国内第一,究竟是凭什么?没了麒麟芯片,脱离华为的荣耀还能继续荣耀吗?华为老旗舰开启清仓模式,麒麟9000徕卡三摄,降幅高达千元新能源汽车迎来市场驱动拐点无需苦等Win11电脑也可玩安卓App!华为移动应用引擎体验工信部发布4大电信运营商频率不值得购买的手机系列华为WATCHGT3Pro手表推送2。1。0。327更新全球5G手机销量排名华为遗憾落榜,苹果第一,中国品牌霸占5席
工程施工合同书来吧,我们谈谈赚钱这个事:请先拿回你的人生苹果也撑不住了!iPhone13全系降价机皇ProMax降至张近东苏宁正在把从概念变成现实逆乱星空刚刚写亲喷身份证开了房可以查多久的(用身份证开了房记录保存多久)小麻雀男性清洗私处的注意事项有哪些?拍苍蝇随便果吃后不瘦反胖是怎么回事这些原因一定要知道中医减肥法让你告别肥胖化学实验室安全热传聚热点网

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