时间:2021-05-18
在编写 TS 时,它做了比我们看到的更多的事情,例如类型保护机制。让我们编写的代码更加严谨,至于怎么回事,让我们来看看吧。
由于这些机制的存在,就算你仍旧以 JS 原生的书写方式,也能帮助你提前发现代码中潜在的问题。(对于认为 TS 语句更复杂的人,也能实现 0 门槛,不改变已有的习惯也能享受静态检测的好处。)
类型保护就是一些表达式,它们会在运行时检查以确保在某个作用域内的类型。
为了更简单的理解,我们首先声明一个联合类型用于举例:
无类型保护时报错
因为 TS 并不知道 pet 的实例是 Bird 还是 Fish,因此为了谨慎起见,在未手动声明类型时 TS 中只能调用 联合类型 中的 公共方法,例子中未 layEggs() 方法。除非你在调用指定对象数据的属性或方法前,明确告诉 TS 数据对象是一个具体的类型。
类型断言实现类型保护
我需要使用 <Fish>pet 的 类型断言,来告诉 TS 目标对象是什么类型:
虽然这样的断言满足了我们的需求,但并不好方便,需要在各处都进行引用。
备注:如果在编写 tsx 时,你需要将 (<Fish>pet) 写成 (pet as Fish),因为在 tsx 中尖括号 <> 有特殊的含义。
函数中使用 is 定位类型
我们将上面的 if 内的判断封装到函数中,获得更方便的类型保护方式,此函数必须使用 parameterName is Type 的 类型谓语:
此函数必须返回为 boolean 类型才生效,当返回 true 时则类型定位为 Fish ,返回 false 时则定位为 Fish 之外的类型(多个类型则以 联合类型 定位)。
需要注意是除了 if 中类型生效,TS 还能自动推断出 else 中的类型。
就算你不使用 TS 这些特定的语句,也能享受 类型保护机制 的好处,下面让我们来看看。
使用 typeof 进行类型保护
如果子类型是只是 number、string、boolean、symbol 这几种数据类型,则可以直接使用 typeof 关键字,TS 能够检测并提供类型保护,我们直接引用官方给的例子:
使用 instanceof 进行类型保护
由于现在前端对于 面向对象 的开发项目越来越多,因此类的引用也更多了。那么类型保护用在此时,可谓是更加有重要,我们使用 instanceof 来达到这一效果:
基于类型保护机制,在语句块中编辑器会给予指定类型的 方法提示,以及类型检测时会提示用户。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文总结一下TypeScript类型声明的书写,很多时候写TypeScript不是问题,写类型就特别纠结,我总结下,我在使用TypeScript中遇到的问题。如
下面随笔说明C++共享数据保护机制。共享数据的保护 对于既需要共享、又需要防止改变的数据应该声明为常类型(用const进行修饰)。 对于不改变对象状态的
#搭建node服务(三):使用TypeScript>JavaScript是一门动态弱类型语言,对变量的类型非常宽容。JavaScript使用灵活,开发速度快,但
在前面一篇文章浅谈ServiceManager成为Android进程间通信(IPC)机制Binder守护进程之路中,介绍了ServiceManager是如何成为
TypeScript和JavaScript是目前项目开发中较为流行的两种脚本语言,typescript和js的区别: 1、TypeScript可以使用Java