前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TypeScript-Exclude

TypeScript-Exclude

作者头像
前端黑板报
发布2024-05-13 17:26:32
610
发布2024-05-13 17:26:32
举报
文章被收录于专栏:前端黑板报前端黑板报

在 TypeScript 中,Exclude 是一个高级类型,属于“类型实用工具”(type utilities)。Exclude 类型用于从联合类型中排除某些类型,只留下不在排除列表中的类型。

基本语法

Exclude 类型的语法如下:

代码语言:javascript
复制
type Exclude<T, U> = T extends U ? never : T;

这里,T 是要操作的类型,U 是要排除的类型。如果 T 可以赋值给 U,则结果为 never;否则,结果为 T

使用场景

  1. 1. 从联合类型中排除某些类型
代码语言:javascript
复制
type MyUnionType = string | number | boolean;

type Result = Exclude<MyUnionType, string>; // Result 被推断为 number | boolean

在这个例子中,我们从 MyUnionType 联合类型中排除了 string 类型,因此 Result 类型只包含 numberboolean

  1. 1. **结合使用多个 Exclude**:
代码语言:javascript
复制
type MyOtherUnionType = string | number | boolean | null | undefined;

type FinalResult = Exclude<Exclude<MyOtherUnionType, string>, null>; // FinalResult 被推断为 number | boolean | undefined

在这个例子中,我们首先排除了 string 类型,然后又排除了 null 类型。

  1. 1. 在类型守卫中使用
代码语言:javascript
复制
interface User {
  id: number;
  name: string;
}

type UserKeys = keyof User;

type NonFunctionKey<T> = Exclude<UserKeys, keyof any>; // 排除所有基本数据类型

function printUser(user: User) {
  for (const key in user) {
    if (typeof user[key as NonFunctionKey<User>] !== "function") {
      console.log(`${key}: ${user[key as NonFunctionKey<User>]}`);
    }
  }
}

在这个例子中,我们创建了一个 NonFunctionKey 类型,它排除了所有基本数据类型,这样我们就可以在循环中排除掉对象上的所有函数属性。

注意事项

  • Exclude 只能用于联合类型和基本类型之间的操作。如果尝试排除复杂类型(如类类型或接口类型),TypeScript 将报错。
  • Exclude 是一个有条件的类型,这意味着它的结果取决于类型检查的结果。如果 T 可以赋值给 U,则结果为 never;否则,结果为 T

Exclude 是一个非常有用的工具,可以帮助你编写更清晰、更可维护的类型代码。通过使用 Exclude,你可以更容易地处理复杂的类型关系,并确保你的代码具有正确的类型安全性。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端黑板报 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本语法
  • 使用场景
  • 注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档