Typescript类型守卫

1,628 阅读1分钟

ts类型守卫主要在类型窄化时使用,其实现类型守卫主要有以下几种方式:

  • 类型判断:typeof
  • 属性或者方法判断:in
  • 实例判断:instanceof
  • 字面量相等判断:==, ===, !=, !==

typeof

typeof 检测变量的类型范围包括: “string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" 等数据类型。不能检测更为复杂的数据类型,也难以区分Array。在使用过程中不好用,所以一般用typeof,而是使用它的替代方案intanceof

instanceof

instanceof主要用于判断一个变量是什么类型,有比较好的扩展性。instanceof 执行后 返回 true 的几种条件【符合一个即可】:

    1. 对象变量.proto=类名或函数名.prototype
    1. 对象变量.proto.proto....proto_=类名或函数名.prototype

也就是说,一个对象变量它的类型如果没有在对应的函数或者类中找到,它就会去该类或者函数原型链的父级去找,直到找到最上面的组先级,如果还是没有找到,就说明找不到了。

in

in 操作符用于遍历目标类型的公开属性名。类似于这样使用:

type Property = 'name' | 'age' | 'phoneNum'; 
type PropertyObject = { [key in Property]: string; }