1. TS中的條件類型

        共 1164字,需瀏覽 3分鐘

         ·

        2021-04-08 20:40


        本篇介紹TS另一種高級(jí)類型-條件類型。

        官方文檔:https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types

        1、條件類型是一種由條件表達(dá)式所決定的類型

        2、條件類型使類型具有了不唯一性,同樣增加了語言的靈活性


        例如:

        T extends U ? X : Y

        若類型T可被賦值給類型U,那么結(jié)果類型就是X類型,否則就是Y類型。

        條件類型約束


        泛型約束的例子:

        type MessageOf<T extends { message: unknown }> = T["message"];

        在此示例中,我們使用 message: unknown 約束泛型T。


        如果我們想 MessageOf 支持任何類型,我們可以通過將約束和條件類型一起使用:

        type MessageOf<T> = T extends { message: unknown } ? T["message"] : never;

        如果條件成立,在 true 分支內(nèi),TypeScript 知道 T 將具有一個(gè) message 屬性。否則將會(huì)返回 never 類型。

        分布條件類型


        當(dāng)條件類型給定聯(lián)合類型時(shí),它們將變?yōu)榉植际健?/p>

        type ToArray<Type> = Type extends any ? Type[] : never;


        如果我們將聯(lián)合類型傳入ToArray,則條件類型將應(yīng)用于該聯(lián)合的每個(gè)成員。

        type ToArray<Type> = Type extends any ? Type[] : never;
        type StrArrOrNumArr = ToArray<string | number>;

        StrArrOrNumArr 類型是 string[] | number[]


        避免這種分配性的行為??梢杂梅嚼ㄌ?hào)將 extends 關(guān)鍵字的每一側(cè)括起來。

        type ToArrayNonDist<Type> = [Type] extends [any] ? Type[] : never;
        type StrOrNumArr = ToArrayNonDist<string | number>;

        StrArrOrNumArr 類型是 (string | number)[]

        瀏覽 37
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 一本久久精品一区二区 | 外国做爰猛烈床戏大尺度 | 理论在线视频 | 涩涩网站大全 | 操逼视频色 |