typeScript学习-类型守卫

发布时间 2023-08-22 16:56:56作者: 空白格k

typeScript学习

类型守卫

为什么要用类型守卫:

类型守卫定义:在 语句的块级作用域【if 语句内或条目运算符表达式内】 缩小变量的一种类型推断的行为。

类型守卫产生时机:TS 条件语句中遇到下列条件关键字时,会在语句的块级作用域内缩小变量的类型。这种类型推断的行为称作类型守卫(Type Guard)。

类型守卫可以帮助我们在块级作用域中获得更为需要的精准变量类型。

  • 实例判断:instanceof

class Customer {
    pay(payMethod: BankPay | MobilePay) {
        // payMethod // 为 BankPay | MobilePay
        if (payMethod instanceof BankPay) {
            // payMethod  // 为 BankPay
        } else if (payMethod instanceof MobilePay) {
            // payMethod // 为 MobilePay
        }
    }
}

 

  • 属性或方法判断:in

class Customer {
    pay(payMethod: BankPay | MobilePay) {
        if ("xx" in payMethod) {
            // payMethod // 为 MobilePay
        }
    }
}

 

  • 类型判断:typeof

  • 字面量相等判断:==、===、≠、=≠=

function cal(num: string | number) {
    // num = num + 10 // 错误
    if (typeof num === 'number') {
        num + 3
    }
}

export { }