成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

減少 TS 重復代碼,Omit 用起來真香!

開發 前端
你用過 TypeScript 內置的 Omit 工具類型么?你想知道 Omit 的應用場景和內部是如何實現的么?如果想的話,閱讀完本文之后,也許你就懂了。

你用過 TypeScript 內置的 Omit 工具類型么?你想知道 Omit 的應用場景和內部是如何實現的么?如果想的話,閱讀完本文之后,也許你就懂了。這是一個使用 type 類型別名定義的 User 類型,用于描述用戶對象。

type User = {
id: string; // 用戶id
name: string; // 用戶名
password: string; // 密碼
createdAt: Date; // 創建時間
updatedAt: Date; // 更新時間
};

其中 id、createdAt 和 updatedAt 這些屬性是在創建用戶時,由服務端自動生成的。因此在注冊用戶時,用于描述注冊用戶對象的 RegisterUser 類型并不需要以上這些屬性。那么我們應該如何高效地定義 RegisterUser 類型呢?這時我們可以使用 TS 內置的 Omit 工具類型。

type RegisterUser = Omit<User, "id" | "createdAt" | "updatedAt">;
type RegisterUser = {
name: string;
password: string;
}

由以上結果可知,id、createdAt 和 updatedAt 這些屬性都已經被過濾掉了,所以使用 Omit 工具類型,我們可以很方便地過濾掉對象類型中不需要的屬性。

其實 Omit 工具類型還有其它的作用,比如我們可以利用接口繼承的方式來實現覆蓋已有對象類型中已知屬性的類型。具體的實現方式也很簡單:

interface UserUI extends Omit<User, "createdAt" | "updatedAt"> {
createdAt: string;
updatedAt: string;
}

在以上代碼中,UserUI 接口描述的對象用于在頁面上顯示用戶信息,所以我們把原有 User 類型中 createdAt 和 updatedAt 屬性的類型都修改成 string 類型。

了解完 Omit 工具類型的應用場景,下面我們來看一下它內部是如何實現的。

// typescript/lib/lib.es5.d.ts
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

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

其中 keyof 操作符用于獲取某種類型中的所有鍵,其返回類型是聯合類型。而 Exclude 工具類型用于實現類型過濾,即從 keyof T 返回的聯合類型中,過濾掉要排除的屬性。最終再使用 Pick 工具類型從原有的對象類型中,挑選出需保留的屬性,組合成新的對象類型。

責任編輯:姜華 來源: 全棧修仙之路
相關推薦

2021-06-30 09:20:18

NuShell工具Linux

2021-03-10 09:54:43

RustNuShell系統

2024-05-21 10:28:51

API設計架構

2023-02-07 06:55:26

Kafka消費消息

2009-07-22 07:45:00

Scala代碼重復

2021-10-29 11:25:41

代碼編程語言Java

2012-07-11 09:34:39

微軟云計算

2024-07-04 11:33:33

2022-05-09 22:53:02

數組類型TS

2021-09-18 08:52:45

人工智能

2020-01-06 15:00:43

Linux電腦發行版

2021-09-29 07:13:12

編程 Python Merge

2021-04-18 07:18:31

Chrome

2022-12-27 17:56:40

ack機制RocketMQ

2020-07-06 15:13:16

安卓AirDrop無線傳輸

2012-12-17 09:54:08

2016-06-12 09:28:46

Ubuntu 16.0升級Linux

2021-01-29 17:40:00

Flyme安卓手機安全

2021-07-12 07:33:31

Nacos微服務管理

2016-03-17 09:45:17

react雙向綁定插件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区日韩 | 国产精品久久久久久久久久免费看 | 欧美精品福利视频 | 国产精品久久精品 | 亚洲欧美日韩精品久久亚洲区 | 欧美国产亚洲一区二区 | 日韩影院一区 | 99久久婷婷国产综合精品电影 | 毛片网站免费观看 | 欧美久久久久 | 337p日本欧洲亚洲大胆精蜜臀 | 一区二区三区欧美在线 | 亚洲综合在| 九九热精品在线 | 一级毛片视频在线观看 | 国产精品久久久亚洲 | 欧美性视频在线播放 | 91精品国产一区二区 | 国产一区二区在线观看视频 | 欧美激情一区二区三区 | 在线第一页 | 国产成人av在线 | 天堂在线1 | 美女福利视频 | 欧美福利 | 亚洲性人人天天夜夜摸 | 欧美在线激情 | 成人精品一区 | 国产精品亚洲成在人线 | 狠狠的干| 欧美成人第一页 | 蜜臀av日日欢夜夜爽一区 | 北条麻妃国产九九九精品小说 | 99re在线 | 日韩av在线不卡 | av天天操 | 91精品久久久久久久 | 亚洲日本免费 | 日本在线网址 | 亚洲成人精品 | 成人免费一区二区三区视频网站 |