zoukankan      html  css  js  c++  java
  • 完整性检查

    当我们想穷举一个类型的所有可能值时,当可能值过多,不免会遗漏过多的东西。
    通常我们穷举一个值的所有可能,我们会采用switch或者if else,当然,这是可行的,下面看一个if else例子

    function test(p:1|2){
        if(p===1){
            return 1
        }else if(p===2){
            return 2
        }
    }
    

    当p的类型为更多的联合类型的时候,我们会写更多的if else
    问题来了,联合类型越长,我们越是容易疏漏某些值,有没有什么方法检测我们是否完整穷举完了呢?
    这就是完整性检查的作用了。

    方法一:never

    function noNumber(x:never){
        throw new Error("no number"+x);
    }
    function test(p:1|2){
        if(p===1){
            return 1
        }else if(p===2){
            return 2
        }else{
            noNumber(p)
        }
    }
    

    never意思是永远不会出现的类型,看上面的例子,p类型为1|2,由于前面检测完毕,则p永远也不会到最后一个else那里。
    当p为1|2|3的时候,ts编译器会检测到运行至最后一个else时,p不为never,p应该为3,也就是number,会出错。
    另外,不仅仅时是if else,ts编译器起也会对switch检测。
    还有,你也可以不return,在if else的括号内做任何事情都是可以的!

    方法二:设置tsconfig.json

    启用 --strictNullChecks,并且指定一个返回值类型

    function test(p:1|2):1|2{
        if(p===1){
            return 1
        }
    }
    

    会报错,因为有可能返回undefined。当然这种方式不推荐,有点繁琐,失去了拓展的可能。

  • 相关阅读:
    iOS开篇——UI之UILabel
    关于Block初识与自己的认识
    浅拷贝与深拷贝
    关于MacBook Pro选购
    准备考试 暂时停更
    Objective-C代理
    Objective-C协议初识
    Objective-C内存管理
    通讯录习题
    软件工程第二次作业 词频统计
  • 原文地址:https://www.cnblogs.com/panshaojun/p/14152601.html
Copyright © 2011-2022 走看看