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

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

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

什么是守衛(wèi)?

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

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

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

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

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

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

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

如何守衛(wèi)?

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

1.typeof

該關(guān)鍵字只能用于對基礎(chǔ)類型進行守衛(wèi),具體來說,是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 ''
}

但它無法解決我們前文舉例的Animal類型,因為typeof對對象只能識別到object,而對象下的屬性是什么仍然是一個黑盒

2.instanceof

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

3.in

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

4.自定義

自定義類型保護是一種函數(shù)寫法,該函數(shù)返回truefalse,TypeScript會對返回值進行類型推斷

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

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

true的結(jié)果會進一步被TypeScript推斷為Dog類型

到此這篇關(guān)于淺聊一下TypeScript中的4種類型守衛(wèi)的文章就介紹到這了,更多相關(guān)TypeScript類型守衛(wèi)內(nèi)容請搜索腳本之家以前的文章或繼續(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ù),對JS腳本加載后執(zhí)行相應(yīng)回調(diào)函數(shù)的操作方法感興趣的朋友,通過本文學習下吧
    2018-02-02
  • JS模板實現(xiàn)方法

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

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

    12行javascript代碼繪制一個八卦圖

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

    javascript顯示隱藏層比較不錯的方法分析

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

    JavaScript體驗異步更好的解決辦法

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

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

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

    頁面定時刷新(1秒刷新一次)

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

    javascript中如何判斷類型匯總

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

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

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

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

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

最新評論

磐安县| 梓潼县| 大同县| 驻马店市| 翼城县| 涿鹿县| 桃园县| 丹江口市| 海安县| 高台县| 浦北县| 巴彦淖尔市| 徐州市| 南昌县| 巴彦淖尔市| 高要市| 长丰县| 白河县| 海门市| 平潭县| 浪卡子县| 泰和县| 砚山县| 隆尧县| 沾益县| 巫溪县| 肥东县| 桦甸市| 买车| 日土县| 日喀则市| 丹棱县| 洞口县| 蛟河市| 聂拉木县| 南乐县| 昌图县| 莎车县| 宝丰县| 平安县| 江山市|