日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Extract 工具類型八個使用技巧

來源: 責編: 時間:2024-03-22 08:56:29 263觀看
導讀Extract 是 TypeScript 中內置的工具類型,它用于從聯合類型中提取出符合某個條件的類型,生成一個新的類型。這個工具類型在日常開發中非常有用,它能夠幫助我們編寫類型安全的代碼和更好地實現代碼復用。/** * Extract fr

HwD28資訊網——每日最新資訊28at.com

Extract 是 TypeScript 中內置的工具類型,它用于從聯合類型中提取出符合某個條件的類型,生成一個新的類型。這個工具類型在日常開發中非常有用,它能夠幫助我們編寫類型安全的代碼和更好地實現代碼復用。HwD28資訊網——每日最新資訊28at.com

/** * Extract from T those types that are assignable to U. * typescript/lib/lib.es5.d.ts */type Extract<T, U> = T extends U ? T : never;type T0 = Extract<"a" | "b" | "c", "a" | "f">// type T0 = "a"

本文我將介紹 Extract 工具類型的 8 個使用技巧,掌握這些技巧之后,在工作中你就能更好地利用 ExtractHwD28資訊網——每日最新資訊28at.com

1.提取指定的基本數據類型

type MyTypes = string | number | boolean;type StringOrNumber = Extract<MyTypes, string | number>;let uid: StringOrNumber = "semlinker" // Okuid = 2024 // Okuid = false // Error// Type 'boolean' is not assignable to type 'StringOrNumber'.

2.提取指定的字符串字面量類型

type Color = 'red' | 'green' | 'blue' | 'yellow';type PrimaryColors = Extract<Color, 'red' | 'green' | 'blue'>;const primaryColor: PrimaryColors = 'blue'; // Okconst secondaryColor: PrimaryColors = 'yellow'; // Error// Type '"yellow"' is not assignable to type 'PrimaryColors'.

3.提取可調用的函數類型

type Value = string | number | (() => void);type CallableFn = Extract<Value, Function>;const fn1: CallableFn = () => console.log('semlinker'); // Okconst fn2: CallableFn = 'semlinker'; // Error// Type 'string' is not assignable to type '() => void'.

4.提取兩個聯合類型的共有成員

type TaskStatus = "Todo" | "InProgress" | "Done" | "Archived";type ModuleHandledStatus = "Todo" | "Done" | "OnHold";type ModuleSpecificStatus = Extract<TaskStatus, ModuleHandledStatus>;// type ModuleSpecificStatus = "Todo" | "Done"

5.提取含有特定屬性的子類型

Animal 聯合類型,包含了多種動物的描述對象,我們想從中提取出含有 "legs" 屬性的子類型。
HwD28資訊網——每日最新資訊28at.com

type Animal =    | { type: 'dog', legs: number }    | { type: 'cat', legs: number }    | { type: 'fish', fins: number };type AnimalsWithLegs = Extract<Animal, { legs: number }>;const dog: AnimalsWithLegs = { type: 'dog', legs: 4 }; // Okconst cat: AnimalsWithLegs = { type: 'cat', legs: 4 }; // Okconst fish: AnimalsWithLegs = { type: 'fish', fins: 6 }; // Error// Type '"fish"' is not assignable to type '"dog" | "cat"'.

6.提取特定的事件類型

type EventTypes = MouseEvent | KeyboardEvent | TouchEvent;type OnlyMouseEvents = Extract<EventTypes, MouseEvent>;function handleMouseEvent(event: OnlyMouseEvents) {    console.log('Handling mouse event:', event.clientX, event.clientY);}document.addEventListener('click', (event) => {    handleMouseEvent(event); // OK});document.addEventListener('keydown', (event) => {    handleMouseEvent(event); // Error    // Argument of type 'KeyboardEvent' is not assignable to parameter of type 'MouseEvent'.});

7.在類型守衛中使用 Extract

使用 Extract 可以在類型守衛中精確地過濾類型,使得在條件分支中可以安全地使用過濾后的類型。HwD28資訊網——每日最新資訊28at.com

type Pet = { type: 'dog', bark: () => void } | { type: 'cat', meow: () => void };function isDog(pet: Pet): pet is Extract<Pet, { type: 'dog' }> {    return pet.type === 'dog';}const pet1: Pet = { type: 'dog', bark: () => console.log('Woof!') }const pet2: Pet = { type: "cat", meow: () => console.log("Meow!") }console.log(`pet1 is dog: ${isDog(pet1)}`) // "pet1 is dog: true" console.log(`pet2 is dog: ${isDog(pet2)}`) // "pet2 is dog: false"

8.在函數重載中使用 Extract

在處理 API 請求的場景中,我們需要根據不同的請求類型(如 GET、POST、DELETE)處理不同類型的數據。為了增強類型安全和確保每種請求類型都正確地處理其數據,我們可以利用 TypeScript 的函數重載和 Extract 工具類型。HwD28資訊網——每日最新資訊28at.com

type RequestType = 'GET' | 'POST' | 'DELETE';type RequestData = {    GET: undefined;    POST: { body: string };    DELETE: { resourceId: number };};// Function overloading, based on the request type, accepts matching data typesfunction sendRequest<T extends RequestType>(type: 'GET', data: Extract<RequestData[T], undefined>): void;function sendRequest<T extends RequestType>(type: 'POST', data: Extract<RequestData[T], { body: string }>): void;function sendRequest<T extends RequestType>(type: 'DELETE', data: Extract<RequestData[T], { resourceId: number }>): void;function sendRequest<T extends RequestType>(type: T, data: RequestData[T]): void {    console.log(`Sending ${type} request with data:`, data);}sendRequest('GET', undefined); // OksendRequest('POST', { body: "semlinker" }); // OksendRequest('DELETE', { resourceId: 2024 }); // OksendRequest('POST', { body: 2024 }); // Error// Type 'number' is not assignable to type 'string'.sendRequest('DELETE', undefined); // Error// Argument of type 'undefined' is not assignable to parameter of type '{ resourceId: number; }'.

本文鏈接:http://m.www897cc.com/showinfo-26-78509-0.htmlExtract 工具類型八個使用技巧

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Excel數據處理利器:C#中三款熱門開源類庫推薦及實例代碼解析

下一篇: 五分鐘上手Python爬蟲:從干飯開始,輕松掌握技巧

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲先锋成人| 亚洲精品乱码久久久久久按摩观 | 亚洲一区二区三区视频播放| 亚洲一区二区黄| 性欧美大战久久久久久久免费观看 | 在线视频亚洲欧美| 欧美亚洲在线观看| 另类av导航| 欧美激情亚洲自拍| 国产精品美女一区二区在线观看| 国产一区二区三区久久 | 久久一区欧美| 99国产精品久久久久久久成人热 | 久久免费视频观看| 欧美巨乳波霸| 国产视频亚洲精品| 亚洲国产一二三| 亚洲欧美成人精品| 亚洲在线1234| 欧美一区久久| 欧美精品在线极品| 国产欧美一二三区| 亚洲国产视频直播| 亚洲欧美在线观看| 欧美va天堂va视频va在线| 国产精品久久久久久久久免费樱桃 | 国产精品入口日韩视频大尺度| 狠狠综合久久av一区二区老牛| 国产一区二区看久久| 91久久极品少妇xxxxⅹ软件| 亚洲欧美一区在线| 欧美激情一区二区三区在线视频| 欧美精品一区在线发布| 国产欧美一区二区精品婷婷| 亚洲欧洲日韩综合二区| 亚洲精品视频一区| 欧美一区二区大片| 欧美另类变人与禽xxxxx| 国内精品美女在线观看| 亚洲视频一区在线| 欧美一级理论性理论a| 欧美精品一区二区视频| 国产一区二区三区四区hd| 在线综合亚洲| 免费人成网站在线观看欧美高清| 国产麻豆成人精品| 一本久道综合久久精品| 毛片av中文字幕一区二区| 国产亚洲欧美一级| 亚洲专区一区二区三区| 欧美日韩久久| 亚洲欧洲日本一区二区三区| 久久久久久夜精品精品免费| 欧美系列精品| 国产精品色网| 日韩亚洲成人av在线| 久久婷婷色综合| 国产亚洲精品美女| 亚洲欧美999| 国产精品国产馆在线真实露脸| 国产日韩欧美在线播放| 亚洲午夜激情免费视频| 欧美精品123区| 亚洲福利在线观看| 久久久久久噜噜噜久久久精品| 国产欧美精品国产国产专区| 亚洲综合成人婷婷小说| 欧美日韩一二三四五区| 亚洲乱码国产乱码精品精98午夜 | 卡一卡二国产精品| 国产一区999| 久久精品国产999大香线蕉| 国产农村妇女毛片精品久久莱园子| 亚洲视频一二区| 欧美三区不卡| 中文国产成人精品| 欧美日韩三区| 一区在线影院| 一区二区三区欧美亚洲| 欧美成人国产va精品日本一级| 国产精品久久国产愉拍| 一本大道久久a久久精品综合| 欧美精品久久一区二区| 亚洲人成啪啪网站| 欧美 日韩 国产精品免费观看| 在线成人av网站| 美日韩精品视频| 亚洲国产精品t66y| 欧美电影免费| 日韩性生活视频| 欧美性一区二区| 亚洲欧美制服另类日韩| 国产精品私拍pans大尺度在线| 亚洲欧美久久久久一区二区三区| 国产精品视频不卡| 性欧美1819性猛交| 国产综合自拍| 欧美成年人网站| 亚洲免费高清视频| 欧美吻胸吃奶大尺度电影| 亚洲先锋成人| 国产日韩欧美成人| 久久人人精品| 亚洲日本一区二区三区| 欧美日韩亚洲高清一区二区| 亚洲一区欧美二区| 国产视频在线观看一区| 久久人人爽人人爽爽久久| 欧美乱大交xxxxx| 欧美日韩一区在线播放| 欧美一区成人| 久久激五月天综合精品| 夜夜嗨av色综合久久久综合网| 国产精品亚洲综合| 欧美巨乳在线| 久久久精品五月天| 久久精品国产免费看久久精品| 欧美一区三区三区高中清蜜桃| 先锋影音久久| 欧美成人高清视频| 欧美成人午夜77777| 久久久精品欧美丰满| 欧美久久久久久久久| 国产精品久久久久久久久借妻| 国产欧美日韩视频| 国产日本欧美视频| 尤物视频一区二区| 亚洲免费av观看| 亚洲黄色在线看| 亚洲一区三区电影在线观看| 久久久最新网址| 欧美日本一道本| 欲色影视综合吧| 欧美午夜视频网站| 国产亚洲精品资源在线26u| 好看的日韩视频| 亚洲国产欧美国产综合一区| 亚洲国产精品一区二区久| 亚洲美女黄色| 亚洲在线日韩| 欧美日韩一区在线播放| 伊人精品久久久久7777| 亚洲欧美日韩成人高清在线一区| 欧美日韩一区二区高清| 一区二区三区在线观看视频| 亚洲免费视频在线观看| 欧美日韩一卡| 一本色道久久综合| 国产婷婷一区二区| 欧美一区二区女人| 欧美在线黄色| 亚洲国产天堂久久国产91| 午夜精品福利一区二区三区av | 亚洲少妇最新在线视频| 久久久久久久高潮| 欧美日韩在线免费观看| 99一区二区| 欧美四级电影网站| 午夜精品成人在线| 亚洲高清在线观看一区| 欧美日韩专区| 欧美一级在线视频| 亚洲精品免费在线观看| 在线不卡中文字幕| 亚洲一区日韩在线| 亚洲精品1234| 国产一区二区三区电影在线观看| 欧美日韩系列| 老司机免费视频久久| 亚洲制服欧美中文字幕中文字幕| 亚洲激情啪啪| 久久亚洲精品视频| 亚洲小说欧美另类婷婷| 亚洲国产精品久久久久婷婷老年| 国产欧美日韩视频一区二区| 欧美日韩免费网站| 久色婷婷小香蕉久久| 国产三级欧美三级| 欧美精品在线播放| 免费高清在线一区| 久久久国产精品一区| 午夜精品久久久久久久99黑人| 一本大道久久a久久精品综合| 最新国产の精品合集bt伙计| 在线视频国产日韩| 国产一区自拍视频| 国产精品视频九色porn| 欧美全黄视频| 欧美激情亚洲另类| 久久综合久久美利坚合众国| 久久精品午夜| 久久九九全国免费精品观看| 午夜一级久久| 亚洲欧美综合v| 亚洲男女自偷自拍| 亚洲小说区图片区| 亚洲一区二区三区成人在线视频精品| 一区二区日韩免费看| 99国产精品99久久久久久粉嫩| 亚洲精品女av网站| 国产精品一区一区三区| 欧美成人影音| 噜噜噜在线观看免费视频日韩| 久久久亚洲国产美女国产盗摄|