您的位置:首页 > 房产 > 家装 > TypeScript-Omit/Pick

TypeScript-Omit/Pick

2024/12/23 16:15:04 来源:https://blog.csdn.net/Bruce__taotao/article/details/140696004  浏览:    关键词:TypeScript-Omit/Pick

文章目录

  • Omit 的词源
        • 词源分析
        • 词源历史
      • 在 TypeScript 中的用法
      • 示例
  • Pick
      • 语法
      • 示例
      • 更复杂的示例
      • 使用 `Pick` 和其他类型组合
      • 实际应用场景
  • Omit vs Pick


Omit 的词源

Omit 是一个英语词汇,它的意思是“省略”或“遗漏”。现在让我们来看看这个词的词源。

词源分析
  • O-: 这是一个拉丁语前缀,表示“out of”或“from”。
  • Mit-: 这部分来自于拉丁语词根 mittere,意为“to send”或“to put”。
  • -er: 这是一个动词词尾,表示“to do”。

因此,omit 的字面意思可以理解为“送出”或“放置出去”,在英语中演变为“省略”或“遗漏”的意思。

词源历史
  • 拉丁语: mittere 意为“to send”或“to put”。从这个根词派生出了许多英语词汇,如 emit(发出)、commit(提交)等。
  • 中古英语: omit 最初出现在 15 世纪左右,源自古法语 ommettre,最终来源于拉丁语 omittre,这是一个由 o-mittere 组成的词,意为“to leave out”或“to fail to do”。

在 TypeScript 中的用法

在 TypeScript 中,Omit<T, K> 是一个实用类型,用于从类型 T 中删除(省略)指定的属性 K。这与英语词汇 omit 的含义紧密相关,即从一个对象类型中“省略”某些属性。

示例

假设我们有一个接口 Person

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

如果我们想要创建一个新的类型 PersonWithoutEmail,该类型与 Person 相同,但不包含 email 属性,我们可以使用 Omit 类型:

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

在这个例子中,PersonWithoutEmail 类型将包含 Person 中的所有属性,除了 email 属性。

Pick

在 TypeScript 中,Pick<T, K> 是一个实用类型,用于从类型 T 中选择一组属性 K,并创建一个新的类型,该类型仅包含这些被选择的属性及其类型。

语法

Pick<T, K>
  • T 是原始类型,通常是一个接口或类型。
  • K 是从 T 中选择的属性键的联合类型。

示例

假设我们有一个接口 Person

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

如果我们想要创建一个新的类型 ContactInfo,该类型仅包含 nameaddress 属性,我们可以使用 Pick 类型:

type ContactInfo = Pick<Person, 'name' | 'address'>;

在这个例子中,ContactInfo 类型将包含 nameaddress 属性,而其他属性将被排除。

更复杂的示例

假设我们有一个更复杂的接口 User

interface User {id: number;name: string;email: string;password: string;roles: string[];settings: {theme: string;notifications: boolean;};
}

我们想要创建一个新的类型 UserPublicInfo,该类型仅包含 idnameemail 属性:

type UserPublicInfo = Pick<User, 'id' | 'name' | 'email'>;

现在 UserPublicInfo 类型将只包含 idnameemail 属性。

使用 Pick 和其他类型组合

Pick 类型可以与其他类型一起使用,例如与 OmitPartialRequired 等类型结合使用,以创建更复杂的类型。

假设我们想要创建一个新的类型 UserWithSettings,该类型包含 User 中的所有属性,但 settings 属性是必需的(即使在 User 中它是可选的):

type UserWithRequiredSettings = Pick<User, Exclude<keyof User, 'settings'>> & Required<Pick<User, 'settings'>>;

在这个例子中,我们使用 Exclude<keyof User, 'settings'> 来获取除了 settings 以外的所有属性键,然后使用 Pick 来选择这些属性。接着我们使用 Required 类型来确保 settings 属性是必需的。

实际应用场景

Pick 类型在实际开发中非常有用,尤其是在需要从一个大的接口中提取特定属性时。例如,假设你有一个 API 接口,需要向客户端返回用户信息的一部分:

interface User {id: number;name: string;email: string;password: string;roles: string[];settings: {theme: string;notifications: boolean;};
}function getUserPublicInfo(user: User): Pick<User, 'id' | 'name' | 'email'> {return {id: user.id,name: user.name,email: user.email,};
}

在这个例子中,getUserPublicInfo 函数返回一个新的对象,该对象仅包含 idnameemail 属性,这有助于保护敏感信息,同时提供必要的用户信息。

Omit vs Pick

比较
目的:
Omit:用于从现有类型中排除某些属性。
Pick:用于从现有类型中选择某些属性。
结果:
Omit:创建一个不包含指定属性的新类型。
Pick:创建一个仅包含指定属性的新类型。
用法:
Omit:通常用于创建一个没有某些属性的新类型,这在需要排除某些敏感数据或不需要的字段时很有用。
Pick:通常用于创建一个包含特定属性的新类型,这在需要精简对象或传递特定属性集时非常有用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com