TypeScript 从类型中排除属性

TypeScript 从类型中排除属性

在本文中,我们将介绍如何使用 TypeScript 从一个类型中排除特定的属性。通过排除属性,我们可以创建一个新的类型,该类型不包含指定的属性。

阅读更多:TypeScript 教程

使用 Exclude<T, U> 泛型来排除属性

TypeScript 提供了 Exclude<T, U> 泛型,用于从类型 T 中排除属性 U。我们可以使用这个泛型来创建一个新的类型,该类型不包含指定的属性。

下面是 Exclude<T, U> 泛型的定义:

type Exclude<T, U> = T extends U ? never : T;
TypeScript

其中,T 是我们要排除属性的类型,U 是我们要排除的属性。

例如,假设我们有一个类型 Person,包含 nameageemail 三个属性:

type Person = {
  name: string;
  age: number;
  email: string;
};
TypeScript

我们想要创建一个新的类型,排除掉 age 属性。可以使用 Exclude<T, U> 泛型来实现:

type ExcludeAge = Exclude<Person, { age: number }>;
TypeScript

ExcludeAge 类型将不包含 age 属性。可以使用 ExcludeAge 来声明一个变量,该变量将不包含 age 属性:

const person: ExcludeAge = {
  name: "John",
  email: "john@example.com"
};
TypeScript

使用 Omit<T, K> 类型来排除属性

除了使用 Exclude<T, U> 泛型,TypeScript 还提供了 Omit<T, K> 类型,用于从类型 T 中排除属性 K。这个类型的使用方式更加简洁。

下面是 Omit<T, K> 类型的定义:

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
TypeScript

其中,T 是我们要排除属性的类型,K 是要排除的属性。

例如,与上面的例子相同,我们有一个类型 Person

type Person = {
  name: string;
  age: number;
  email: string;
};
TypeScript

想要创建一个新的类型,排除掉 age 属性。可以使用 Omit<T, K> 类型来实现:

type OmitAge = Omit<Person, "age">;
TypeScript

OmitAge 类型将不包含 age 属性。可以使用 OmitAge 来声明一个变量,该变量将不包含 age 属性:

const person: OmitAge = {
  name: "John",
  email: "john@example.com"
};
TypeScript

示例说明

让我们通过一个更具体的示例来说明如何排除属性。

假设我们正在构建一个图书馆管理系统,并定义了一个 Book 类型:

type Book = {
  title: string;
  author: string;
  price: number;
  publishDate: Date;
};
TypeScript

现在,我们想要创建一个新的类型 BookWithoutPrice,该类型排除掉 Book 类型中的 price 属性。

我们可以使用 Exclude<T, U> 泛型:

type BookWithoutPrice = Exclude<Book, { price: number }>;
TypeScript

或者使用 Omit<T, K> 类型更简洁:

type BookWithoutPrice = Omit<Book, "price">;
TypeScript

现在,我们可以声明一个变量,其类型是 BookWithoutPrice

const book: BookWithoutPrice = {
  title: "TypeScript in Action",
  author: "John Doe",
  publishDate: new Date("2021-01-01")
};
TypeScript

这个变量将不包含 price 属性。

总结

本文介绍了如何使用 TypeScript 从一个类型中排除属性。我们可以使用 Exclude<T, U> 泛型或 Omit<T, K> 类型来创建一个新的类型,该类型不包含指定的属性。通过排除属性,我们可以更灵活地定义类型,并且提高代码的可读性和可维护性。希望本文对你了解 TypeScript 的属性排除有所帮助!

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册