类型守卫
在前几篇介绍了断言,在使用断言时我们已经确定了变量的类型,确定该类型时一定存在(否则则会欺骗编译,运行时报错),那么为什么还要类型守卫呢?因为类型断言还是需要借助类型守卫的,类型守卫主要是用来判断未知类型是不是所需要的类型。 类型守卫主要包括四种方式:
- in
- typeof
- instanceof
- 自定义类型
1、in- 定义属性场景下内容的确认
先写两个接口Teacher、Student,然后将这两个接口进行联合声明,使用in来判断属性是否在传递的参数中,然后分别作输出。 缺点:用 in 关键字缩小数据类型必须有一个独特的属性作为判别标准,否则不能用 in 关键字
interface Teacher{ name:string; courses:string;
}
interface Student{ name:string; study:string;
}
type Class = Teacher | Student;
function getInfo(val:Class){ //此时val类型缩小为Teacher类型 if('courses' in val){console.log(val.courses) } //此时val类型缩小为Student类型 if('study' in val){console.log(val.study) }
}
getInfo({ name: 'student', study: "Philosophy" });
//打印结果为Philosophy,因为传参中含有study属性,所以走了第二个判断
2、typeof-类型分类场景下的身份确认
为什么用typeof做类型守卫呢?因为typeof能判断JS基本数据类型。typeof只能识别

类型守卫是 TypeScript 中用于判断未知类型是否符合预期类型的方法,包括 `in`、`typeof`、`instanceof` 和自定义类型。`in` 适用于确认对象是否包含特定属性;`typeof` 判断基本数据类型,如 Boolean、String 等;`instanceof` 用于检测对象是否属于某个类的实例;自定义类型可以通过关键字实现类型谓词函数,确保变量是特定类型。文章通过实例详细解释了四种类型守卫的用法。
最低0.47元/天 解锁文章
383





