<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          TS中的條件類型

          共 1164字,需瀏覽 3分鐘

           ·

          2021-04-08 20:40


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

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

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

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


          例如:

          T extends U ? X : Y

          若類型T可被賦值給類型U,那么結果類型就是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 分支內,TypeScript 知道 T 將具有一個 message 屬性。否則將會返回 never 類型。

          分布條件類型


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

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


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

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

          StrArrOrNumArr 類型是 string[] | number[]


          避免這種分配性的行為。可以用方括號將 extends 關鍵字的每一側括起來。

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

          StrArrOrNumArr 類型是 (string | number)[]

          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天三级片 | 国产精品a V视频 | 五月天婷婷黄色 | 成人毛片在线大全免费 | 猫先生大连劲爆身材语文 |