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

聽說你熟悉 Pick,那就來手寫一個 MyPick!

開發 前端
Kextends keyof T 是泛型約束,用于約束類型參數 K 對應的實際類型為對象類型所有鍵組成的聯合類型的子類型。T[P] 用于獲取 T 類型中 P 屬性對應的類型,其中類型變量 P 的值會在遍歷的過程中不斷改變。

你用過 TypeScript 內置的 Pick 工具類型么?你想知道它內部是如何實現的么?本期阿寶哥將帶你一起手寫一個 MyPick 工具類型。看完本文之后,你就能了解該工具類型涉及的相關知識點。你準備好了么?現在我們馬上進入正題。

這是一個 Pick 函數,它的作用是挑選 keys 屬性數組中每個 key 對應的值,組成一個新的對象。

function Pick(obj, keys) {
const ret = {};
for (const key of keys) {
ret[key] = obj[key];
}
return ret;
}

const user = {
id: 666,
name: "阿寶哥",
address: "廈門",
};

const PickedUser = MyPick(user, ["id", "name"]);

在 JavaScript 中我們操作的是對象,而在 TypeScript 中我們操作的是類型。同樣,在 TypeScript 中我們也可以把 User 類型轉換成只包含 id 和 name 屬性的 PickedUser 類型。

type User = {
id: number;
name: string;
address: string;
};

type PickedUser = {
id: number;
name: string;
};

要實現上述的功能,我們需要使用 TypeScript 提供的映射類型。它是一種泛型類型,可用于把原有的對象類型映射成新的對象類型。

映射類型的語法如下:

{ [ P in K ] : T }

其中 P in K 類似于 JavaScript 中的 for...in 語句,用于遍歷 K 類型中的所有類型,而 T 類型變量用于表示 TS 中的任意類型。了解完這些知識之后,我們來定義一個 MyPick 工具類型。

type MyPick<T, K extends keyof T> = {
[P in K]: T[P];
};

在以上代碼中,T、K 被稱為類型參數,與 Pick 函數中參數的作用類似。keyof 操作符用于獲取某種類型中的所有鍵,其返回類型是聯合類型。如果 keyof 操作的是對象類型,其功能與 Object.keys 方法類似。

而 K extends keyof T 是泛型約束,用于約束類型參數 K 對應的實際類型為對象類型所有鍵組成的聯合類型的子類型。T[P] 用于獲取 T 類型中 P 屬性對應的類型,其中類型變量 P 的值會在遍歷的過程中不斷改變。

下面我們來驗證一下 MyPick 工具類型,是否實現對應的功能。在實際工作中,若遇到對應的場景,我們可以直接使用 TypeScript 提供的 Pick 工具類型。

type PickedUser = MyPick<User, "id" | "name">;

// type PickedUser = {
// id: number;
// name: string;
// }

在 TypeScript 中映射類型非常重要,如果你想深入學習映射類型,可以觀看 “用了 TS 映射類型,同事直呼內行!

責任編輯:武曉燕 來源: 全棧修仙之路
相關推薦

2020-09-04 07:33:12

Redis HashMap 數據

2020-04-03 09:00:21

系統架構代碼

2018-06-22 15:52:50

云桌面

2015-07-29 10:00:16

開源項目

2025-01-10 08:41:54

2023-11-08 07:05:07

架構設計群聊系統

2025-03-17 02:00:00

2023-12-14 17:27:28

架構設計數據表

2023-12-29 11:32:27

2015-11-27 10:02:05

WindowsLinuxLabxNow

2012-11-19 10:09:25

2022-03-09 09:43:01

工具類線程項目

2023-10-08 22:38:52

2023-11-01 18:10:45

架構設計技術

2018-07-30 14:28:22

2022-11-11 08:19:03

redis分布式

2021-03-18 08:04:54

AQS工具CAS

2021-12-07 06:55:17

節流函數Throttle

2020-11-02 08:19:18

RPC框架Java

2022-01-26 15:20:00

配置微服務架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩不卡在线 | 丝袜一区二区三区 | av在线播放网站 | 欧美精品久久久久久 | 中文字幕一区二区三区乱码在线 | 国产精品.xx视频.xxtv | 黄色网址大全在线观看 | 亚洲三级在线观看 | 91玖玖 | 久久av资源网 | 欧美国产精品一区二区三区 | 精品国产99 | 免费欧美| 蜜桃av一区二区三区 | 日本精品视频在线观看 | 国产午夜精品理论片a大结局 | 色婷婷一区| 欧美黄在线观看 | 国产在线观看一区二区 | 国产剧情一区 | 一区二区三区在线免费观看 | 日韩毛片| 在线中文字幕视频 | 国产精品免费av | 国产一区二区三区四区 | 最新国产视频 | 国产精品毛片久久久久久久 | 久久99一区二区 | 精品国产一区探花在线观看 | 亚洲视频中文字幕 | 日韩久久久久久久 | 午夜久久久久久久久久一区二区 | 国产成人精品免费视频大全最热 | 久久精品手机视频 | 看羞羞视频| 免费三级av| 成人免费网站www网站高清 | 成人在线小视频 | 手机av网| 91视频一区二区三区 | 国产亚洲欧美在线 |