TypeScript值比较、泛型函数类型和签名

TS类型缩小

当形参可以接受多种类型时,就需要对传入数据的类型进行检测

typeof xxx === 'xxx’叫做类型守护,表示判断某个变量是否属于某种类型,而且不用担心类型不符合等错误,TS已经智能的为我们处理好了这些问题

function miniType(str: number|string){
   
   
    if(typeof str === 'number'){
   
   
        console.log(new Array(str))
    }else if(typeof str === 'string'){
   
   
        console.log(str)
    }
}

TS真值缩小

真值:即除了0 null undefined 0n 这些假值以外的所有值

真值缩小是为了精确定位传入值的数据类型,如下代码所示,对于传入的strs变量,我们仅仅判断它是一个object是不够的,因为null也是一个object对象,这很明显扰乱我们代码逻辑

此时我们在判定条件前面加上 strs && 即可执行真值缩小,代码逻辑变成:该变量类型为object且同时为真值(非null)才成立

function trueNarrow1(strs: string | string[] | null) {
   
   
    if(strs && typeof strs === 'object'){
   
   
        for(const s of strs){
   
   
            console.log(s)
        }
    }
}

TS等值缩小

使用 === 或者 !== 则表示严格的等于或者不等于机制

  1. 上部分代码因形参都具有string类型,那么使用===表示当且仅当俩变量类型都是string的才执行代码
  2. 下部分代码表示当他不等于null时才执行(特别注意他只针对null这个空值进行判断,因为它是严格的)
// ===符号
function equalNarrow1(s1: string | undefined, s2: string | number) {
   
   
    if(s1===s2){
   
   
        console.log(s1+s2)
    }
}

// !==符号
function equalNarrow2(s3: number|null){
   
   
    if(s3!==null){
   
   
        // ....
    }
}

使用!=来表示宽松的不等于机制
所谓宽松的,即指它是否定一类而不是单个类型,譬如null和undefined都属于同一类(无意义字符),所以我们只需要令变量 !=null 就可以包含 !=undefined 等多种状况

// !=宽松机制
function equalNarrow3(s4: string|null|undefined){
   
   
    if(s4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhillerDev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值