fe-interview icon indicating copy to clipboard operation
fe-interview copied to clipboard

[TypeScript] 第1526天 在TypeScript中Omit类型有什么作用?

Open haizhilin2013 opened this issue 2 years ago • 2 comments

第1526天 在TypeScript中Omit类型有什么作用?

3+1官网

我也要出题

haizhilin2013 avatar Jun 19 '23 20:06 haizhilin2013

Omit<T, K> 是 TypeScript 中的一个内置工具类型(utility type),用于从类型 T 中排除指定属性键集合 K 对应的属性。这意味着它会创建一个新类型,该类型是原类型 T 的子集,不包含 K 中指定的属性。

hemengzhao avatar Sep 26 '23 06:09 hemengzhao

在TypeScript中,Omit类型用于从一个类型中排除一个或多个属性,并返回一个新的类型。它在处理对象类型时非常有用,特别是在需要从现有类型中创建一个新类型,但不包含某些特定属性的情况下。

Omit 类型的定义

Omit类型是TypeScript的内置工具类型之一,它的定义如下:

type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
  • T:表示原始类型。
  • K:表示需要排除的属性键的联合类型。

Omit通过结合PickExclude类型来实现:

  • Exclude<keyof T, K>:从T的所有键中排除K指定的键。
  • Pick<T, Exclude<keyof T, K>>:从T中选择排除后的键,构造一个新类型。

示例

假设我们有一个类型 Person,它包含多个属性:

interface Person {
    name: string;
    age: number;
    email: string;
    address: string;
}

现在,我们希望创建一个新类型 PersonWithoutEmail,它包含Person的所有属性,但不包含email属性。我们可以使用Omit类型来实现:

type PersonWithoutEmail = Omit<Person, 'email'>;

const person: PersonWithoutEmail = {
    name: 'Alice',
    age: 30,
    address: '123 Main St'
    // email属性被排除了
};

多个属性排除

Omit类型也可以用于排除多个属性。例如,我们希望创建一个不包含emailaddress属性的新类型:

type PersonWithoutContactInfo = Omit<Person, 'email' | 'address'>;

const person: PersonWithoutContactInfo = {
    name: 'Alice',
    age: 30
    // email和address属性被排除了
};

使用场景

  1. 简化类型定义:当需要从现有类型中排除一个或多个属性时,Omit可以避免重复定义。
  2. 类型安全:通过使用Omit,可以确保在排除属性后的新类型中不会意外包含被排除的属性。
  3. 增强代码可读性:使用Omit可以使类型定义更加清晰,易于理解。

结合其他工具类型

Omit可以与其他工具类型(如PickPartial等)结合使用,以创建更复杂的类型。例如,假设我们有一个部分可选的Person类型,但不包括email属性:

type PartialPersonWithoutEmail = Partial<Omit<Person, 'email'>>;

const person: PartialPersonWithoutEmail = {
    name: 'Alice'
    // 其他属性都是可选的,email属性被排除了
};

总结

Omit类型在TypeScript中非常有用,可以从一个类型中排除一个或多个属性,并返回一个新的类型。这在处理复杂对象类型时,特别是在需要从现有类型中创建一个修改后的类型时,非常方便和实用。它提高了代码的可读性和类型安全性,使类型定义更加简洁和易于维护。

llccing avatar Jun 26 '24 06:06 llccing