ts类型守卫主要在类型窄化时使用,其实现类型守卫主要有以下几种方式:
- 类型判断:
typeof - 属性或者方法判断:
in - 实例判断:
instanceof - 字面量相等判断:
==,===,!=,!==
typeof
typeof 检测变量的类型范围包括: “string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" 等数据类型。不能检测更为复杂的数据类型,也难以区分Array。在使用过程中不好用,所以一般用typeof,而是使用它的替代方案intanceof
instanceof
instanceof主要用于判断一个变量是什么类型,有比较好的扩展性。instanceof 执行后 返回 true 的几种条件【符合一个即可】:
-
- 对象变量.proto=类名或函数名.prototype
-
- 对象变量.proto.proto....proto_=类名或函数名.prototype
也就是说,一个对象变量它的类型如果没有在对应的函数或者类中找到,它就会去该类或者函数原型链的父级去找,直到找到最上面的组先级,如果还是没有找到,就说明找不到了。
in
in 操作符用于遍历目标类型的公开属性名。类似于这样使用:
type Property = 'name' | 'age' | 'phoneNum';
type PropertyObject = { [key in Property]: string; }