TypeScript------>类型保护

TypeScript能够在特定的区块中保证变量属于某种确定的类型。可以在此区块中放心的引用此类型的属性,或调用此类型的方法。

 

    下面的例子中,因为我们不知道程序运行的时候到底会传入什么样的参数,所以必须在每一处加上类型断言,这显然不是一个理想的方案,代码可读性差,而类型保护就是用来解决这个问题的,它可以提前对类型进行怕判断

enum Type {Strong,Week}
class Java{
    helloJava(){
        console.log("hello Java")
    }
}
class JavaScript{
    helloJavaScript(){
        console.log("hello JavaScript")
    }
}

function getLanguage(type:Type){
    let lang = type === Type.Strong? new Java() : new JavaScript();
    if( !!(lang as Java).helloJava ){
        (lang as Java).helloJava()
    }else{
         (lang as JavaScript).helloJavaScript()
    }
}
getLanguage(Type.Strong)

   4种创建这种特殊区块的方法

        1).instanceof   判断实例是不是属于某个类

        2).in关键字   判断一个属性是不是属于某个对象

        3).typeof 判断实例是不是属于某个类

        4).创建类型保护函数 (某些判断可能不是一条语句能够搞定的,需要更多复杂的逻辑,适合封装到一个函数内)    isJava方法的返回值类型叫做类型谓词   

function isJava(lang:Java|JavaScript):lang is Java{
    return (lang as Java).helloJava !== undefined;
}

function getLanguage( type:Type , x:string|number ){
    let lang = type === Type.Strong? new Java() : new JavaScript();
    //---------instanceof
    if(lang instanceof Java){
        lang.helloJava()
    }else{
        lang.helloJavaScript
    }
    //---------in
    if("java" in lang){
        lang.helloJava()
    }else{
        lang.helloJavaScript()
    }
    //typeof
    if( typeof(x) === "string" ){
        x.length    //在这个区块中x就一定是string类型,它可以拥有string的属性和方法
    }else{
        x.toFixed()//在这个区块中x就一定是number类型,它可以拥有number的方法
    }
    // .创建类型保护函数
    if( isJava(lang) ){
        lang.helloJava()
    }else{
        lang.helloJavaScript()
    }
}
getLanguage(Type.Strong,3)

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值