AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Extract 工具類型八個(gè)使用技巧

來(lái)源: 責(zé)編: 時(shí)間:2024-03-22 08:56:29 221觀看
導(dǎo)讀Extract 是 TypeScript 中內(nèi)置的工具類型,它用于從聯(lián)合類型中提取出符合某個(gè)條件的類型,生成一個(gè)新的類型。這個(gè)工具類型在日常開(kāi)發(fā)中非常有用,它能夠幫助我們編寫類型安全的代碼和更好地實(shí)現(xiàn)代碼復(fù)用。/** * Extract fr

eL428資訊網(wǎng)——每日最新資訊28at.com

Extract 是 TypeScript 中內(nèi)置的工具類型,它用于從聯(lián)合類型中提取出符合某個(gè)條件的類型,生成一個(gè)新的類型。這個(gè)工具類型在日常開(kāi)發(fā)中非常有用,它能夠幫助我們編寫類型安全的代碼和更好地實(shí)現(xiàn)代碼復(fù)用。eL428資訊網(wǎng)——每日最新資訊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 個(gè)使用技巧,掌握這些技巧之后,在工作中你就能更好地利用 ExtracteL428資訊網(wǎng)——每日最新資訊28at.com

1.提取指定的基本數(shù)據(jù)類型

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.提取可調(diào)用的函數(shù)類型

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.提取兩個(gè)聯(lián)合類型的共有成員

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

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

Animal 聯(lián)合類型,包含了多種動(dòng)物的描述對(duì)象,我們想從中提取出含有 "legs" 屬性的子類型。
eL428資訊網(wǎng)——每日最新資訊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.在類型守衛(wèi)中使用 Extract

使用 Extract 可以在類型守衛(wèi)中精確地過(guò)濾類型,使得在條件分支中可以安全地使用過(guò)濾后的類型。eL428資訊網(wǎng)——每日最新資訊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.在函數(shù)重載中使用 Extract

在處理 API 請(qǐng)求的場(chǎng)景中,我們需要根據(jù)不同的請(qǐng)求類型(如 GET、POST、DELETE)處理不同類型的數(shù)據(jù)。為了增強(qiáng)類型安全和確保每種請(qǐng)求類型都正確地處理其數(shù)據(jù),我們可以利用 TypeScript 的函數(shù)重載和 Extract 工具類型。eL428資訊網(wǎng)——每日最新資訊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://www.tebozhan.com/showinfo-26-78509-0.htmlExtract 工具類型八個(gè)使用技巧

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Excel數(shù)據(jù)處理利器:C#中三款熱門開(kāi)源類庫(kù)推薦及實(shí)例代碼解析

下一篇: 五分鐘上手Python爬蟲(chóng):從干飯開(kāi)始,輕松掌握技巧

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 一加Ace2 Pro官宣:普及16G內(nèi)存 引領(lǐng)24G

    一加官方今天繼續(xù)為本月發(fā)布的新機(jī)一加Ace2 Pro帶來(lái)預(yù)熱,公布了內(nèi)存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領(lǐng),還有呢?#一加Ace2Pro#,2023 年 8 月,敬請(qǐng)期待。”同時(shí)
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問(wèn)我,如何才能學(xué)好IO流,對(duì)各種流的概念,云里霧里的,不求甚解。用到的時(shí)候,現(xiàn)百度,功能雖然實(shí)現(xiàn)了,但是為什么用這個(gè)?不知道。更別說(shuō)效率問(wèn)題了~下次再遇到,
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時(shí)候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯(cuò),每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 慕巖炮轟抖音,百合網(wǎng)今何在?

    來(lái)源:價(jià)值研究所 作者:Hernanderz&ldquo;難道就因?yàn)樽约旱囊粋€(gè)產(chǎn)品牛逼了,從客服到總裁,都不愿意正視自己產(chǎn)品和運(yùn)營(yíng)上的問(wèn)題,選擇逃避了嗎?&rdquo;這一番話,出自百合網(wǎng)聯(lián)合創(chuàng)
  • 中國(guó)家電海外掘金正當(dāng)時(shí)|出海專題

    作者|吳南南編輯|胡展嘉運(yùn)營(yíng)|陳佳慧出品|零態(tài)LT(ID:LingTai_LT)2023年,出海市場(chǎng)戰(zhàn)況空前,中國(guó)創(chuàng)業(yè)者在海外紛紛摩拳擦掌,以期能夠把中國(guó)的商業(yè)模式、創(chuàng)業(yè)理念、戰(zhàn)略打法輸出海外,他們依
  • AI芯片初創(chuàng)公司Tenstorrent獲三星和現(xiàn)代1億美元投資

    Tenstorrent是一家由芯片行業(yè)資深人士Jim Keller領(lǐng)導(dǎo)的加拿大初創(chuàng)公司,專注于開(kāi)發(fā)人工智能芯片,該公司周三表示,已經(jīng)從現(xiàn)代汽車集團(tuán)和三星投資基金等
  • 三星電子Q2營(yíng)收60萬(wàn)億韓元 存儲(chǔ)業(yè)務(wù)營(yíng)收同比仍下滑超過(guò)50%

    7月27日消息,據(jù)外媒報(bào)道,從三星電子所發(fā)布的財(cái)報(bào)來(lái)看,他們主要利潤(rùn)來(lái)源的存儲(chǔ)芯片業(yè)務(wù)在今年二季度仍不樂(lè)觀,營(yíng)收同比仍在大幅下滑,所在的設(shè)備解決方案
  • OPPO K11評(píng)測(cè):旗艦級(jí)IMX890加持 2000元檔最強(qiáng)影像手機(jī)

    【Techweb評(píng)測(cè)】中端機(jī)型用戶群體巨大,占了中國(guó)目前手機(jī)市場(chǎng)的大頭,一直以來(lái)都是各手機(jī)品牌的“必爭(zhēng)之地”,其中OPPO K系列機(jī)型一直以來(lái)都以高品質(zhì)、
  • OPPO Reno10 Pro英雄聯(lián)盟定制禮盒公布:薩勒芬妮同款配色夢(mèng)幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新機(jī),全系標(biāo)配了超光影長(zhǎng)焦鏡頭,是迄今為止拍照
Top