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:通常用于创建一个包含特定属性的新类型,这在需要精简对象或传递特定属性集时非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从应答到解决:深度剖析电话客服热线系统的核心功能与价值

一、引言 在当今这个信息时代&#xff0c;客户服务的质量直接关系到企业的生存和发展。电话客服热线系统作为企业与客户之间沟通的桥梁&#xff0c;发挥着至关重要的作用。 1.电话客服热线系统的重要性 电话客服热线系统是企业与客户之间最直接、最有效的沟通渠道之一。它不…

Oracle集群RAC磁盘管理命令asmcmd的使用

文章目录 ASM磁盘共享简介ASM磁盘共享的优势ASM磁盘组成ASM磁盘共享的应用场景Asmcmd简介Asmcmd的功能Asmcmd的命令Asmcmd的使用注意事项Asmcmd运行模式交互模式运行非交互模式运行ASMCMD命令分类实例管理命令:文件管理命令:磁盘组管理命令:模板管理命令:文件访问管理命令:…

Python文献调研(一)环境搭建

一、安装Python版本 1.点击进入Python官网 Download Python | Python.org 2.根据自己的需求选择python的版本&#xff0c;点击【Download】 3.自定义安装路径&#xff0c;记得勾选Add Python xxx to PATH 这步是自动配置环境变量的&#xff0c;如果忘记勾选&#xff0c;建议…

VirtualBox 安装Centos 7 避坑指南 SSH连不上 镜像失效 静态网络配置等

背景 几乎每次安装Centos 7 时&#xff0c;都会遇到各种各样的问题&#xff0c;毕竟每次安装动辄就是半年几年&#xff0c;几乎都是在换工作时&#xff0c;有了新机器才会倒腾一次&#xff0c;时间久远&#xff0c;就会忘记一些细节&#xff0c;这次整理一下&#xff0c;避免以…

如何定位线上OOM

造成OOM的原因 1一次性申请太多对象。如&#xff1a;从数据库获取大量数据。 解决方法&#xff1a;更改申请对象的数量。如&#xff1a;做个分页。 2内存资源使用完未释放。如&#xff1a;太多线程建立数据库连接而未释放。 解决方法&#xff1a;使用线程池。 3本身资源不够…

Android笔试面试题AI答之线程Handler、Thread(2)

答案仅供参考&#xff0c;来自 讯飞星火大模型 目录 1.Android多线程间通信和多进程之间通信有什么不同&#xff0c;分别怎么实现?2.请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系&#xff1f;3.Android 线程间通信有哪几种方式?4.子线程发消息…

虚拟机学习

虚拟机的优点&#xff1a; 为什么要使用虚拟机&#xff1f;VMware安装使用_研究虚拟机的意义-CSDN博客 虚拟机使用教程&#xff1a; 手把手从安装本地虚拟机&#xff0c;基于docker&#xff0c;部署springbootvue项目&#xff08;若依框架前后端分离版本演示&#xff09;&am…

Linux---01---安装VMware

一. 什么时Linux Linux 是一个开源的类 Unix 操作系统,Linux 是许多计算机硬件的底层操作系统&#xff0c;特别是服务器、嵌入式系统和个人电脑。它支持多种架构&#xff0c;包括 x86、x64、ARM 和 MIPS 等。Linux 因其稳定性、安全性、开源性以及广泛的社区支持而广受欢迎。 …

VPN与加密隧道:确保网络数据传输的安全

在信息时代&#xff0c;数据安全和隐私保护成为了网络用户和企业关注的焦点。随着远程工作和分布式办公环境的普及&#xff0c;保障数据在互联网上安全传输显得尤为重要。虚拟私人网络&#xff08;Virtual Private Network, VPN&#xff09;和加密隧道技术在这一背景下扮演了至…

如何压缩视频大小不改变画质?这5个视频压缩免费软件超好用!

如何压缩视频大小不改变画质&#xff1f;随着生活的水平逐步提高&#xff0c;视频流媒体服务越来越受欢迎。提供简短而引人注目的视频来展示您的产品或服务已成为一种出色的营销手段。然而&#xff0c;当您要准备导出最终视频时&#xff0c;可能会面临一个常见问题&#xff1a;…

小规模的LLMS

对于小模型来说&#xff0c;训练目标已经改变。关键问题是&#xff0c;AI系统如何从更少的数据中学到更多 我们需要模型先变得更大&#xff0c;再变得更小&#xff0c;因为我们需要「巨兽」将数据重构、塑造为理想的合成形式&#xff0c;逐渐得到「完美的训练集」&#xff0c;…

算法之递归算法

递归是非常常见的一种算法&#xff0c; 也比较难以理解&#xff0c;简而言之&#xff0c;递归就是写了一个方法&#xff0c;方法中还调用了该方法&#xff0c;相当于自己调用自己&#xff0c;如果书写不当&#xff0c;就会有堆栈溢出的风险&#xff0c;无法跳出。 所以我们编写…

【Rust光年纪】选择适合你的项目:Rust语言云平台SDK大比拼

构建稳健的云服务&#xff1a;深度评析Rust语言云平台SDK 前言 随着云计算和跨平台开发的不断发展&#xff0c;越来越多的开发者开始关注使用Rust语言进行云服务开发。本文将介绍几个用于Rust语言的主流云平台SDK&#xff0c;探讨它们的核心功能、安装与配置方法以及API概览&…

虚拟机centos9搭建wordpress

目录 1. 更换yum源更新系统软件包&#xff1a; 1.1备份yum源 1.1.1创建备份目录&#xff1a; 1.1.2移动现有仓库配置文件到备份目录&#xff1a; 1.1.3验证备份&#xff1a; 1.2更换yum源 1.2.1添加yum源 1.2.2删除和建立yum缓存 1.3更新系统软件包 1.4 yum与dnf介绍…

RV1126 Linux 系统,接外设,时好时坏(二)排查问题的常用命令

在 RV1126 Linux 系统中,排查外设连接问题时,可以使用多种命令来诊断和调试。以下是一些常用的命令和工具: 1. 查看系统日志 dmesg: 显示内核环形缓冲区的消息,通常包含设备初始化、驱动加载和错误等信息。 dmesg | grep <设备名或相关关键字>journalctl: 查看系统…

做短视频素材哪里找?去哪里下载?自媒体下载素材网站分享

自媒体视频创作&#xff1a;高质量素材网站大公开&#xff01; 大家好&#xff0c;我是一名热情的短视频创作者。今天&#xff0c;我要与大家分享一些寻找优质视频素材的秘诀。无论是新手还是老手&#xff0c;这些建议都能帮助你的视频在众多平台中脱颖而出&#xff0c;吸引更…

Python:jsonl文件转json文件,并做字段处理

在使用LLaMA-Factory对shenzhi-wang/Llama3-8B-Chinese-Chat&#xff08;https://huggingface.co/shenzhi-wang/Llama3-8B-Chinese-Chat/tree/main&#xff09;进行微调时&#xff0c;希望使用COIG-CQIA的小红书数据集&#xff08;https://huggingface.co/datasets/m-a-p/COIG-…

JVM 11 的优化指南:如何进行JVM调优,JVM调优参数有哪些

这篇文章将详细介绍如何进行JVM 11调优&#xff0c;包括JVM 11调优参数及其应用。此外&#xff0c;我将提供12个实用的代码示例&#xff0c;每个示例都会结合JVM启动参数和Java代码。 本文已收录于&#xff0c;我的技术网站 java-broke.site&#xff0c;有大厂完整面经&#x…

教育+大模型-可解释-2024-7-15

教育大模型-可解释 文章目录 教育大模型-可解释摘要1 引言2 LLMs在教育领域应用3 可解释性的关键技术和方法3.1 局部解释3.1.1 基于特征归因的解释3.1.2 基于注意力的解释3.1.3 基于示例的解释 3.2 全局解释3.2.1 基于探针的解释3.2.2 模型内部机制的揭示 摘要 随着人工智能技…

Java面试八股之Spring-boot-starter-parent的作用是什么

Spring-boot-starter-parent的作用是什么 spring-boot-starter-parent 是Spring Boot项目中的一个特殊POM&#xff08;Project Object Model&#xff09;&#xff0c;它主要的作用是提供一系列默认的配置和依赖管理&#xff0c;以便简化项目的构建过程。以下是spring-boot-sta…