<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】1331- 減少 TS 重復(fù)代碼,Omit 用起來(lái)真香!

          共 1373字,需瀏覽 3分鐘

           ·

          2022-05-28 09:42

          阿寶哥精心準(zhǔn)備的《輕松學(xué) TypeScript》?視頻教程已經(jīng)更新到第十五期了,通過(guò)形象生動(dòng)的動(dòng)畫(huà),讓你輕松搞懂 TypeScript 的難點(diǎn)和核心知識(shí)點(diǎn)!

          你用過(guò) TypeScript 內(nèi)置的 Omit 工具類(lèi)型么?你想知道 Omit 的應(yīng)用場(chǎng)景和內(nèi)部是如何實(shí)現(xiàn)的么?如果想的話,閱讀完本文之后,也許你就懂了。這是一個(gè)使用 type 類(lèi)型別名定義的 User 類(lèi)型,用于描述用戶(hù)對(duì)象。

          type?User?=?{
          ??id:?string;?//?用戶(hù)id
          ??name:?string;?//?用戶(hù)名
          ??password:?string;?//?密碼
          ??createdAt:?Date;?//?創(chuàng)建時(shí)間
          ??updatedAt:?Date;?//?更新時(shí)間
          };

          其中 id、createdAtupdatedAt 這些屬性是在創(chuàng)建用戶(hù)時(shí),由服務(wù)端自動(dòng)生成的。因此在注冊(cè)用戶(hù)時(shí),用于描述注冊(cè)用戶(hù)對(duì)象的 RegisterUser 類(lèi)型并不需要以上這些屬性。那么我們應(yīng)該如何高效地定義 RegisterUser 類(lèi)型呢?這時(shí)我們可以使用 TS 內(nèi)置的 Omit 工具類(lèi)型。

          type?RegisterUser?=?Omit"id"?|?"createdAt"?|?"updatedAt">;

          type?RegisterUser?=?{
          ????name:?string;
          ????password:?string;
          }

          由以上結(jié)果可知,idcreatedAtupdatedAt 這些屬性都已經(jīng)被過(guò)濾掉了,所以使用 Omit 工具類(lèi)型,我們可以很方便地過(guò)濾掉對(duì)象類(lèi)型中不需要的屬性。

          其實(shí) Omit 工具類(lèi)型還有其它的作用,比如我們可以利用接口繼承的方式來(lái)實(shí)現(xiàn)覆蓋已有對(duì)象類(lèi)型中已知屬性的類(lèi)型。具體的實(shí)現(xiàn)方式也很簡(jiǎn)單:

          interface?UserUI?extends?Omit?{
          ??createdAt:?string;
          ??updatedAt:?string;
          }

          在以上代碼中,UserUI 接口描述的對(duì)象用于在頁(yè)面上顯示用戶(hù)信息,所以我們把原有 User 類(lèi)型中 createdAtupdatedAt 屬性的類(lèi)型都修改成 string 類(lèi)型。

          了解完 Omit 工具類(lèi)型的應(yīng)用場(chǎng)景,下面我們來(lái)看一下它內(nèi)部是如何實(shí)現(xiàn)的。

          //?typescript/lib/lib.es5.d.ts
          type?Omitextends?keyof?any>?=?Pick>;

          由以上代碼可知,Omit 工具類(lèi)型內(nèi)部使用了 TS 內(nèi)置的 Pick 和 Exclude 工具類(lèi)型。

          其中 keyof 操作符用于獲取某種類(lèi)型中的所有鍵,其返回類(lèi)型是聯(lián)合類(lèi)型。而 Exclude 工具類(lèi)型用于實(shí)現(xiàn)類(lèi)型過(guò)濾,即從 keyof ?T 返回的聯(lián)合類(lèi)型中,過(guò)濾掉要排除的屬性。最終再使用 Pick 工具類(lèi)型從原有的對(duì)象類(lèi)型中,挑選出需保留的屬性,組合成新的對(duì)象類(lèi)型。

          掃碼查看?輕松學(xué) TypeScript?系列視頻教程

          (目前已更新?15?期)

          看完 Omit 工具類(lèi)型的具體實(shí)現(xiàn),你有沒(méi)有發(fā)現(xiàn) Omit 和 Pick 這兩個(gè)工具類(lèi)型是互補(bǔ)的。如果你對(duì) Pick 工具類(lèi)型還不了解的話,可以觀看 “聽(tīng)說(shuō)你熟悉 Pick,那就來(lái)手寫(xiě)一個(gè) MyPick!” 這一期的視頻。

          類(lèi)型體操專(zhuān)題已經(jīng)開(kāi)始了,一起學(xué)起來(lái)吧!你喜歡以這種形式學(xué) TS 么?喜歡的話,記得點(diǎn)贊與收藏喲。

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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  国产一区二区视频在线 | 91精品国产综合久久蜜芽解析速度 | 日韩AI视频在线免费观看 | 欧美三级全黄做爰大尺 | 中文字幕无码视频在线 |