安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

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……
豆瓣评分9。1!据说入门Python的人都读过这本书掀盖变身掌机?OPPOFindN自由悬停功能被玩出了新花样阿里巴巴旗下多个App已接入微信支付,闲鱼盒马等正申请接入YunOS作为国产系统明明用起来和安卓没什么差别,为什么国内美式数字霸权是全球互联互通最大障碍降噪音感游戏充电宝,南卡N2s给你超大杯的满足中国之所以很难实现科技创新,是因为缺乏科学家精神,你认同吗?目前降价最狠的三款手机新消息小米将实现完美屏下,realme再添一员,华为新机也来悬崖上的最美童话小镇波西塔诺苹果公司的新FaceID戴口罩也可解锁iPhone?Meta的黑公关,TikTok是好靶子装个系统教你安装全新Windows11全程展示,精彩无限戈阳龟峰景区当年呼声最高的五位留洋篮球小将,如今都怎么样了工程招标合同书老人不适合使用哪些电器人生何处不绽放读后感字实用的写作经验英雄的赞歌步创建高性价比内容营销计划中班教案油价调整新消息今天4月23号,调整后全国9295号油新售价47岁王艳罕见晒儿子!15岁儿子身高又胖又壮,变乖巧眼神温柔

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利