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

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

開發(fā) 開發(fā)工具
本文我將介紹 Exclude? 工具類型的 8 個(gè)使用技巧,掌握這些技巧之后,在工作中你就能更好地利用 Exclude 工具類型來滿足不同的使用場(chǎng)景。

Exclude 是 TypeScript 中內(nèi)置的工具類型,它用于從一個(gè)聯(lián)合類型中排除掉你不希望包含的類型,生成一個(gè)新的類型。這個(gè)工具類型在日常開發(fā)中非常有用,它能夠幫助我們編寫類型安全的代碼和更好地實(shí)現(xiàn)代碼復(fù)用。

/**
 * Exclude from T those types that are assignable to U.
 * typescript/lib/lib.es5.d.ts
 */
type Exclude<T, U> = T extends U ? never : T;

type T0 = Exclude<"a" | "b" | "c", "a" | "b">
// type T0 = "c"

本文我將介紹 Exclude 工具類型的 8 個(gè)使用技巧,掌握這些技巧之后,在工作中你就能更好地利用 Exclude 工具類型來滿足不同的使用場(chǎng)景。

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

type MyTypes = string | number | boolean;
type StringOrNumber = Exclude<MyTypes, boolean>;

let uid: StringOrNumber = "semlinker" // Ok
uid = 2024 // Ok
uid = false // Error
// Type 'boolean' is not assignable to type 'StringOrNumber'.

2.排除 string 或 number 類型的子類型

type Status = "success" | "error" | 200 | 500;

type StringStatus = Exclude<Status, number>; 
// type StringStatus = "success" | "error"

type NumberStatus = Exclude<Status, string>
// type NumberStatus = 200 | 500

3.排除兩個(gè)聯(lián)合類型的共有成員

type TaskStatus = "Todo" | "InProgress" | "Done" | "Archived";
type ModuleHandledStatus = "Todo" | "Done" | "OnHold";

type TaskOnlyStatus = Exclude<TaskStatus, ModuleHandledStatus>;
// type TaskOnlyStatus = "InProgress" | "Archived"

4.排除含有特定屬性的子類型

Animal 聯(lián)合類型,包含了多種動(dòng)物的描述對(duì)象,我們想從中排除含有 "legs" 屬性的子類型。

type Animal =
    | { type: 'dog', legs: number }
    | { type: 'cat', legs: number }
    | { type: 'fish', fins: number };
type AnimalsWithFins = Exclude<Animal, { legs: number }>;

const fish: AnimalsWithFins = { type: 'fish', fins: 6 }; // Ok
const dog: AnimalsWithFins = { type: 'dog', legs: 4 }; // Error
// Type '"dog"' is not assignable to type '"fish"'.

5.排除同個(gè)屬性不同類型的子類型

除了可以使用 Exclude<Animal, { legs: number }> 來創(chuàng)建 AnimalsWithFins 類型,該類型還可以通過 Exclude<Animal, { type: 'dog' | 'cat' }> 這種方式來創(chuàng)建。

type Animal =
    | { type: 'dog', legs: number }
    | { type: 'cat', legs: number }
    | { type: 'fish', fins: number };

type AnimalsWithFins = Exclude<Animal, { type: 'dog' | 'cat' }>;

const fish: AnimalsWithFins = { type: 'fish', fins: 6 }; // Ok
const dog: AnimalsWithFins = { type: 'dog', legs: 4 }; // Error
// Type '"dog"' is not assignable to type '"fish"'.

6.排除枚舉類型的某些成員

利用 Exclude 工具類型可以排除枚舉中的某些成員,從而得到一個(gè)新的類型。

enum Status { New, InProgress, Done, Cancelled }

type ActiveStatus = Exclude<Status, Status.Done | Status.Cancelled>;
// type ActiveStatus = Status.New | Status.InProgress

7.排除指定前綴的字符串字面量類型

利用 Exclude 工具類型和模板字面量類型,我們可以實(shí)現(xiàn)從字符串字面量聯(lián)合類型中,排除指定前綴或后綴的字符串字面量。

type LogEvent =
    | "userLogin"
    | "userLogout"
    | "systemException"
    | "systemCrash"
    | "performanceLoadTime"
    | "performanceApiResponse";

type SystemAndPerformanceEvents = Exclude<LogEvent, `user${string}`>;
// type SystemAndPerformanceEvents = "systemException" | "systemCrash" | "performanceLoadTime" | "performanceApiResponse"

8.排除不同格式的字符串字面量類型

type LogEvent =
    | "userLogin"
    | "userLogout"
    | "UserLogin" // New
    | "UserLogout" // New
    | "systemException"
    | "systemCrash"
    | "performanceLoadTime"
    | "performanceApiResponse";

type SystemAndPerformanceEvents = Exclude<LogEvent, `${"user" | "User"}${string}`>;
// type SystemAndPerformanceEvents = "systemException" | "systemCrash" | "performanceLoadTime" | "performanceApiResponse"
責(zé)任編輯:姜華 來源: 全棧修仙之路
相關(guān)推薦

2024-03-21 09:58:27

ExtractTypeScript工具類型

2022-05-30 00:04:16

開源Github技巧

2012-10-29 11:01:17

2025-01-02 15:08:36

SpringBoot自動(dòng)配置Java

2010-08-25 11:14:05

云安全數(shù)據(jù)安全網(wǎng)絡(luò)安全

2011-09-25 10:46:18

云計(jì)算安全

2010-09-09 13:44:06

DIVCSS

2025-02-07 15:01:49

Promise數(shù)組前端

2010-08-11 16:43:05

職場(chǎng)

2023-10-24 09:25:23

IT技巧文化

2023-11-29 10:16:45

內(nèi)網(wǎng)開源

2022-12-15 16:38:17

2023-10-10 10:27:37

DevOps

2023-09-26 12:04:15

重構(gòu)技巧Pythonic

2024-01-02 16:16:34

Promise前端

2023-01-11 11:35:40

重構(gòu)PythonPythonic

2025-05-09 09:26:12

2020-07-21 08:14:13

TypeScrip

2023-06-02 08:00:00

ChatGPT人工智能

2025-04-03 08:27:00

Python代碼開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人免费大片黄在线播放 | 国产精品成人一区二区三区夜夜夜 | 国产精品91久久久久久 | 亚洲国产精品一区二区第一页 | 亚洲狠狠 | 91九色网站 | 在线只有精品 | 久久久久国产 | 国产精品久久久久免费 | 国产一级片久久久 | 亚洲午夜精品一区二区三区他趣 | 久久亚洲一区二区三 | 99爱视频 | 国产一级在线 | 九色在线观看 | 久久久精品一区二区三区 | 99精品国产一区二区三区 | 91久色| 国产精品资源在线 | 99爱在线观看 | 成人一区二区三区 | 91精品国产综合久久香蕉麻豆 | 中文天堂在线观看 | 9999久久 | 亚洲成人毛片 | 在线免费黄色小视频 | 欧美一区二区三区在线播放 | 免费黄色的视频 | 久优草 | 91人人在线 | 亚洲激情综合 | 久久国产一区 | 99免费精品视频 | 欧美激情a∨在线视频播放 成人免费共享视频 | 国产不卡一区 | 日韩精品免费一区二区在线观看 | 亚洲一区二区免费电影 | 91高清在线观看 | 国产在线视频一区 | 国产精品视频中文字幕 | 成人免费一区二区三区视频网站 |