浅聊一下TypeScript中的4种类型守卫

 更新时间:2023年08月25日 11:08:15   作者:思路大于开发  
类型守卫是TypeScript中特有的用于在运行时检查类型的方式,它显式的将javascript代码按类型划分,从而确保了运行安全,下面我们就来简单聊聊TypeScript中的4种类型守卫吧

什么是守卫?

守卫是一种代码安全性检查,只在满足某个指定条件时运行一段特定的逻辑,比如vite中的import.meta.hot

什么是类型守卫?

类型守卫是TypeScript中特有的用于在运行时检查类型的方式,它显式的将javascript代码按类型划分,从而确保了运行安全

为什么需要类型守卫?

这可能要从一个联合类型说起。如下,是笔者提出的一个可能不那么贴合的示例:有联合类型Animal,它由DogSp组成,它们都有hobby属性,但属性的类型不同

type Dog = {
    hobby:'chishi'
}
type Sp = {
    hobby:()=>void;
}
type Animal = Dog | SP

现在你的代码里要根据Animal去做一些事情,预期是Sp时执行函数调用,是Dog输出console提示。如果没有守卫,则该需求无法实现,因为你无法确定subject到底是哪一种,执行调用不符合Dog,执行输出不满足Sp

如何守卫?

TypeScript中,实现守卫的方式有4种:ininstanceoftypeof和自定义

1.typeof

该关键字只能用于对基础类型进行守卫,具体来说,是numberstringbooleansymbolfunctionundefined

function log(subject:number|string):string{
    if(typeof subject === 'number'){
        return `${subject+5}`
    }
    if(typeof subject === 'string'){
        return subject + '5'
    }
    return ''
}

但它无法解决我们前文举例的Animal类型,因为typeof对对象只能识别到object,而对象下的属性是什么仍然是一个黑盒

2.instanceof

对象类型的识别可以借助instanceof关键字,它通过检查a是否是b的实例来确定a的可用范围

3.in

当两个类型是对象形式,但具有不同的独有属性时,可以使用in关键字来守卫。如下,TypeScript会自动将其推断为Dog类型

4.自定义

自定义类型保护是一种函数写法,该函数返回truefalseTypeScript会对返回值进行类型推断

如下,当传递的subject中包含hobby时,'hobby' in subject的结果为true

function isDog(subject:any):subject is Dog{
    return 'hobby' in subject
}

true的结果会进一步被TypeScript推断为Dog类型

到此这篇关于浅聊一下TypeScript中的4种类型守卫的文章就介绍到这了,更多相关TypeScript类型守卫内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • xmlplus组件设计系列之按钮(2)

    xmlplus组件设计系列之按钮(2)

    xmlplus 是一个JavaScript框架,用于快速开发前后端项目。这篇文章主要介绍了xmlplus组件设计系列之按钮,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • cocos creator Touch事件应用(触控选择多个子节点的实例)

    cocos creator Touch事件应用(触控选择多个子节点的实例)

    下面小编就为大家带来一篇cocos creator Touch事件应用(触控选择多个子节点的实例)。小编觉得挺不错的,现在就想给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 解决layer.open后laydate失效的问题

    解决layer.open后laydate失效的问题

    今天小编就为大家分享一篇解决layer.open后laydate失效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • js实现点击生成随机div

    js实现点击生成随机div

    这篇文章主要为大家详细介绍了js实现点击生成随机div,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • open 动态修改img的onclick事件示例代码

    open 动态修改img的onclick事件示例代码

    动态修改img的onclick事件,使用open也可轻松做到,下面有个不错的示例,需要的朋友可以参考下
    2013-11-11
  • JS从数组中随机获取一个值的常用写法

    JS从数组中随机获取一个值的常用写法

    这篇文章主要介绍了JS从数组中随机获取一个值的常用写法,需要的朋友可以参考下
    2023-07-07
  • JavaScript indexOf()原理及使用方法详解

    JavaScript indexOf()原理及使用方法详解

    这篇文章主要介绍了JavaScript indexOf()原理及使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 深入浅析JavaScript中数据共享和数据传递

    深入浅析JavaScript中数据共享和数据传递

    这篇文章主要介绍了深入浅析JavaScript中数据共享和数据传递的相关资料,需要的朋友可以参考下
    2016-04-04
  • js实现可旋转的立方体模型

    js实现可旋转的立方体模型

    这里给大家分享的是通过js脚本来控制页面中的正方体转动特效,用户可以点击按钮向右转动,也可以向下转动,结合自己的需求控制即可。效果非常棒,这里推荐给大家
    2016-10-10
  • 原生js图片轮播效果实现代码

    原生js图片轮播效果实现代码

    这篇文章主要为大家详细介绍了基于原生js实现图片轮播效果的具体代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10

最新评论