当前位置:首页 > 科技  > 软件

Exclude 工具类型八个使用技巧

来源: 责编: 时间:2024-04-02 17:23:37 113观看
导读Exclude 是 TypeScript 中内置的工具类型,它用于从一个联合类型中排除掉你不希望包含的类型,生成一个新的类型。这个工具类型在日常开发中非常有用,它能够帮助我们编写类型安全的代码和更好地实现代码复用。/** * Exclud

oHO28资讯网——每日最新资讯28at.com

Exclude 是 TypeScript 中内置的工具类型,它用于从一个联合类型中排除掉你不希望包含的类型,生成一个新的类型。这个工具类型在日常开发中非常有用,它能够帮助我们编写类型安全的代码和更好地实现代码复用。oHO28资讯网——每日最新资讯28at.com

/** * 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 个使用技巧,掌握这些技巧之后,在工作中你就能更好地利用 Exclude 工具类型来满足不同的使用场景。oHO28资讯网——每日最新资讯28at.com

1.排除指定的基本数据类型

type MyTypes = string | number | boolean;type StringOrNumber = Exclude<MyTypes, boolean>;let uid: StringOrNumber = "semlinker" // Okuid = 2024 // Okuid = 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.排除两个联合类型的共有成员

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

4.排除含有特定属性的子类型

Animal 联合类型,包含了多种动物的描述对象,我们想从中排除含有 "legs" 属性的子类型。oHO28资讯网——每日最新资讯28at.com

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 }; // Okconst dog: AnimalsWithFins = { type: 'dog', legs: 4 }; // Error// Type '"dog"' is not assignable to type '"fish"'.

5.排除同个属性不同类型的子类型

除了可以使用 Exclude<Animal, { legs: number }> 来创建 AnimalsWithFins 类型,该类型还可以通过 Exclude<Animal, { type: 'dog' | 'cat' }> 这种方式来创建。oHO28资讯网——每日最新资讯28at.com

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 }; // Okconst dog: AnimalsWithFins = { type: 'dog', legs: 4 }; // Error// Type '"dog"' is not assignable to type '"fish"'.

6.排除枚举类型的某些成员

利用 Exclude 工具类型可以排除枚举中的某些成员,从而得到一个新的类型。oHO28资讯网——每日最新资讯28at.com

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

7.排除指定前缀的字符串字面量类型

利用 Exclude 工具类型和模板字面量类型,我们可以实现从字符串字面量联合类型中,排除指定前缀或后缀的字符串字面量。oHO28资讯网——每日最新资讯28at.com

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"

本文链接:http://www.28at.com/showinfo-26-80891-0.htmlExclude 工具类型八个使用技巧

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 提高生产力!这10个Lambda表达式必须掌握,开发效率嘎嘎上升!

下一篇: 我想做独立开发,该如何起步?

标签:
  • 热门焦点
  • 影音体验是真的强 简单聊聊iQOO Pad

    影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • Java NIO内存映射文件:提高文件读写效率的优秀实践!

    Java NIO内存映射文件:提高文件读写效率的优秀实践!

    Java的NIO库提供了内存映射文件的支持,它可以将文件映射到内存中,从而可以更快地读取和写入文件数据。本文将对Java内存映射文件进行详细的介绍和演示。内存映射文件概述内存
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 每天一道面试题-CPU伪共享

    每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
  • “买真退假” 这种“羊毛”不能薅

    “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主&ldquo;七王&rdquo;在群里介绍一些刷单赚
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top