美文网首页
TS进阶(四)类型保护

TS进阶(四)类型保护

作者: Viewwei | 来源:发表于2021-01-06 10:26 被阅读0次

    类型保护是为了更加精确的知道类型

    typeof保护

    可以使用typeof用来确定类型,那么参数就可以使用确定类型的方法

      function a(a:number | string | boolean):number{
            if (typeof a == "string"){
                //a.length
                //可以使用字符的方法
            }else if (typeof a == "number"){
            // 可以使用number的方法
            }else{
                //可以使用布尔值
            }
            return 1
        }
    }
    

    instanceof 方法

    可以使用instanceof用来确定类型,那么参数就可以使用确定类型的方法

     class  A {
            name:string = "1"
        }
        class  C {
            name1:string ="222"
        }
        function AM(param:A |C) {
            if(param instanceof A){
                // param.name
                //可以使用A的属性和方法
            }
        }
    

    null 保护

    null保护,就是保护部位null。注意嵌套方法嵌套
    function nullCheck(a:string | null){
    if (a == null){
    return ""
    }
    return a
    }

    小知识

    使用!表示非空断言,a?.b表示a有值,返回a.b的值,没有返回undefined的

    字面量保护

    可以使用=== == !== !=来区分字面量的类型

    type charat  = '1' | '2'|'3'
        function chara(x:charat) {
            //参数X在函数内部也受类型限制
            if (x =='1'){
    
            }else if (x=="3")
        }
    

    in 保护

    in操作符号可以安全的检查一个对象上是否存在一个属性

     interface A2 {
            A:number
        }
        interface A3{
            B:number
        }
        
        // 这里切记,不能使用typeof instanceof 来判断类型,因为接口(interface)
    //    在编译阶段为删除掉
        function test(a:A2|A3){
            if ("A" in a){
                //确定类型为A
            }
        }
    

    自定义类型保护

    可以在函数外部定义提个函数用来判断参数的接口类型

        interface C {
            name:string,
            leg:number
        }
        interface C2 {
            name2:string,
            leg:number
        }
    
        function isC (arg :C|C2): arg is C{
            return (arg as C) .name !== undefined
        }
        function test2(a:C|C2){
            if (isC(a)){
                // 确定为C
            }
        }
    

    相关文章

      网友评论

          本文标题:TS进阶(四)类型保护

          本文链接:https://www.haomeiwen.com/subject/qsmonktx.html