Typescript中Omit和Pick的区别

发布时间 2023-12-11 10:38:10作者: 脆皮鸡

Omit<T, K>Pick<T, K> 他们的区别在于它们的功能和作用对象:


  • Omit<T, K>:用于从类型 T排除属性 K,生成一个新的类型,即返回类型中去掉指定属性的结果。这个工具适用于当我们需要创建一个新类型,该类型与原类型相似,但排除了特定属性的情况。

  • Pick<T, K>:用于从类型 T选择属性 K,生成一个新的类型,即只包含指定属性的结果。这个工具适用于当我们需要从一个类型中提取出特定属性,组成一个新的类型的情况。

换句话说,Omit<T, K> 是在原类型的基础上排除指定的属性,而 Pick<T, K> 是在原类型的基础上只选择指定的属性。这两个工具的使用场景不同,但都是为了更灵活地操作 TypeScript 中的类型而设计的。

例子

当我们有一个 Person 类型如下:

type Person = {
  name: string;
  age: number;
  gender: 'male' | 'female';
};

我们可以使用 Omit<T, K>Pick<T, K> 来生成新的类型。

例子 1:使用 Omit<T, K> 排除属性

type PersonWithoutAge = Omit<Person, 'age'>;
// 等同于 type PersonWithoutAge = { name: string; gender: 'male' | 'female'; }

const person: PersonWithoutAge = {
  name: 'Alice',
  gender: 'female',
};

在上面的例子中,我们使用 Omit<Person, 'age'> 生成了一个新的类型 PersonWithoutAge,它排除了 Person 类型中的 age 属性。在创建 person 对象时,我们只需要提供 namegender 属性,而不需要提供 age 属性。

例子 2:使用 Pick<T, K> 选择属性

type PersonWithNameAndGender = Pick<Person, 'name' | 'gender'>;
// 等同于 type PersonWithNameAndGender = { name: string; gender: 'male' | 'female'; }

const person: PersonWithNameAndGender = {
  name: 'Bob',
  gender: 'male',
};

在上面的例子中,我们使用 Pick<Person, 'name' | 'gender'> 生成了一个新的类型 PersonWithNameAndGender,它只包含了 Person 类型中的 namegender 属性。在创建 person 对象时,我们只需要提供 namegender 属性,而不需要提供 age 属性。

通过这两个例子,你可以看到 Omit<T, K>Pick<T, K> 的不同用法和效果。Omit 用于排除属性,Pick 用于选择属性。