最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺聊一下TypeScript中的4種類(lèi)型守衛(wèi)

 更新時(shí)間:2023年08月25日 11:08:15   作者:思路大于開(kāi)發(fā)  
類(lèi)型守衛(wèi)是TypeScript中特有的用于在運(yùn)行時(shí)檢查類(lèi)型的方式,它顯式的將javascript代碼按類(lèi)型劃分,從而確保了運(yùn)行安全,下面我們就來(lái)簡(jiǎn)單聊聊TypeScript中的4種類(lèi)型守衛(wèi)吧

什么是守衛(wèi)?

守衛(wèi)是一種代碼安全性檢查,只在滿足某個(gè)指定條件時(shí)運(yùn)行一段特定的邏輯,比如vite中的import.meta.hot

什么是類(lèi)型守衛(wèi)?

類(lèi)型守衛(wèi)是TypeScript中特有的用于在運(yùn)行時(shí)檢查類(lèi)型的方式,它顯式的將javascript代碼按類(lèi)型劃分,從而確保了運(yùn)行安全

為什么需要類(lèi)型守衛(wèi)?

這可能要從一個(gè)聯(lián)合類(lèi)型說(shuō)起。如下,是筆者提出的一個(gè)可能不那么貼合的示例:有聯(lián)合類(lèi)型Animal,它由DogSp組成,它們都有hobby屬性,但屬性的類(lèi)型不同

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

現(xiàn)在你的代碼里要根據(jù)Animal去做一些事情,預(yù)期是Sp時(shí)執(zhí)行函數(shù)調(diào)用,是Dog輸出console提示。如果沒(méi)有守衛(wèi),則該需求無(wú)法實(shí)現(xiàn),因?yàn)槟銦o(wú)法確定subject到底是哪一種,執(zhí)行調(diào)用不符合Dog,執(zhí)行輸出不滿足Sp

如何守衛(wèi)?

TypeScript中,實(shí)現(xiàn)守衛(wèi)的方式有4種:ininstanceof、typeof和自定義

1.typeof

該關(guān)鍵字只能用于對(duì)基礎(chǔ)類(lèi)型進(jìn)行守衛(wèi),具體來(lái)說(shuō),是numberstring、boolean、symbol、function、undefined

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

但它無(wú)法解決我們前文舉例的Animal類(lèi)型,因?yàn)?code>typeof對(duì)對(duì)象只能識(shí)別到object,而對(duì)象下的屬性是什么仍然是一個(gè)黑盒

2.instanceof

對(duì)象類(lèi)型的識(shí)別可以借助instanceof關(guān)鍵字,它通過(guò)檢查a是否是b的實(shí)例來(lái)確定a的可用范圍

3.in

當(dāng)兩個(gè)類(lèi)型是對(duì)象形式,但具有不同的獨(dú)有屬性時(shí),可以使用in關(guān)鍵字來(lái)守衛(wèi)。如下,TypeScript會(huì)自動(dòng)將其推斷為Dog類(lèi)型

4.自定義

自定義類(lèi)型保護(hù)是一種函數(shù)寫(xiě)法,該函數(shù)返回truefalseTypeScript會(huì)對(duì)返回值進(jìn)行類(lèi)型推斷

如下,當(dāng)傳遞的subject中包含hobby時(shí),'hobby' in subject的結(jié)果為true

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

true的結(jié)果會(huì)進(jìn)一步被TypeScript推斷為Dog類(lèi)型

到此這篇關(guān)于淺聊一下TypeScript中的4種類(lèi)型守衛(wèi)的文章就介紹到這了,更多相關(guān)TypeScript類(lèi)型守衛(wèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS腳本加載后執(zhí)行相應(yīng)回調(diào)函數(shù)的操作方法

    JS腳本加載后執(zhí)行相應(yīng)回調(diào)函數(shù)的操作方法

    本文主要講解怎么在成功加載 js 文件后再執(zhí)行相應(yīng)回調(diào)任務(wù),對(duì)JS腳本加載后執(zhí)行相應(yīng)回調(diào)函數(shù)的操作方法感興趣的朋友,通過(guò)本文學(xué)習(xí)下吧
    2018-02-02
  • JS模板實(shí)現(xiàn)方法

    JS模板實(shí)現(xiàn)方法

    我們?cè)谑褂肑S渲染DOM時(shí),一般使用字符串創(chuàng)建DOM然后附加到父元素上,如果附加的DOM是動(dòng)態(tài)易變的,那需要在函數(shù)中寫(xiě)大量邏輯。如果在控件實(shí)現(xiàn)過(guò)程中,這帶來(lái)的問(wèn)題更為嚴(yán)重。
    2013-04-04
  • 12行javascript代碼繪制一個(gè)八卦圖

    12行javascript代碼繪制一個(gè)八卦圖

    本文給大家分享的是使用有限的代碼繪制八卦圖,算是考核下自己對(duì)于javascript的理解,這里推薦給大家,有需要的小伙伴參考下。
    2015-04-04
  • javascript顯示隱藏層比較不錯(cuò)的方法分析

    javascript顯示隱藏層比較不錯(cuò)的方法分析

    通常的解決辦法是把“答案”當(dāng)作整個(gè)問(wèn)題容器的子元素,然后點(diǎn)擊父元素上的按鈕后展開(kāi)對(duì)應(yīng)的子元素。通過(guò)父子元素的對(duì)應(yīng)關(guān)系來(lái)匹配標(biāo)題和答案。
    2008-09-09
  • JavaScript體驗(yàn)異步更好的解決辦法

    JavaScript體驗(yàn)異步更好的解決辦法

    本篇文章主要給大家講述了JavaScript體驗(yàn)異步更好的解決辦法,有這方面需要的朋友跟著學(xué)習(xí)參考下吧。
    2018-01-01
  • Echarts折線圖設(shè)置線條顏色及線條以下代碼示例

    Echarts折線圖設(shè)置線條顏色及線條以下代碼示例

    最近項(xiàng)目需要,一直在使用Echarts視圖,現(xiàn)在遇到一個(gè)要修改echarts折線圖顏色的需求,下面這篇文章主要給大家介紹了關(guān)于Echarts折線圖設(shè)置線條顏色及線條以下區(qū)域漸變顏色的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • 頁(yè)面定時(shí)刷新(1秒刷新一次)

    頁(yè)面定時(shí)刷新(1秒刷新一次)

    頁(yè)面定時(shí)刷新的示例想必大家也見(jiàn)到不少,在本文將為大家介紹的是,如何實(shí)現(xiàn)1秒刷新一次,感興趣的朋友可以了解下本文
    2013-11-11
  • javascript中如何判斷類(lèi)型匯總

    javascript中如何判斷類(lèi)型匯總

    這篇文章主要給大家介紹了關(guān)于javascript中如何判斷類(lèi)型的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用javascript具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • JS動(dòng)態(tài)添加元素及綁定事件造成程序重復(fù)執(zhí)行解決

    JS動(dòng)態(tài)添加元素及綁定事件造成程序重復(fù)執(zhí)行解決

    這篇文章主要給大家介紹了關(guān)于JS動(dòng)態(tài)添加元素及綁定事件造成程序重復(fù)執(zhí)行的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-12-12
  • JS實(shí)現(xiàn)的論壇Ajax打分效果完整實(shí)例

    JS實(shí)現(xiàn)的論壇Ajax打分效果完整實(shí)例

    這篇文章主要介紹了JS實(shí)現(xiàn)的論壇Ajax打分效果,以完整實(shí)例形式分析了JavaScript響應(yīng)鼠標(biāo)事件動(dòng)態(tài)操作頁(yè)面元素樣式的相關(guān)技巧,需要的朋友可以參考下
    2015-10-10

最新評(píng)論

东方市| 长汀县| 和顺县| 贵州省| 富民县| 福建省| 乌拉特后旗| 岳西县| 富蕴县| 台东县| 交城县| 甘肃省| 闸北区| 隆林| 通江县| 德清县| 婺源县| 白河县| 迁安市| 开化县| 绥中县| 唐河县| 红安县| 大理市| 巴林右旗| 色达县| 南木林县| 威宁| 望谟县| 南城县| 祁门县| 富裕县| 慈溪市| 白水县| 哈密市| 博白县| 越西县| 昌吉市| 来宾市| 浦东新区| 搜索|