TypeScript中的Omit和Pick

最近面试中被问到了TypeScript中的Omit和Pick。第一时间就是尬住了,因为在工作里很少使用了TS,基本都是在写类型。这俩关键词,有点不面熟。面试结束后也是了解了一下,挺简单的两个类型工具。

TypeScript 中,OmitPick 是两个常用的类型工具,用于从现有类型中创建新类型,以便更精确地描述我们需要的数据结构。

Omit

Omit 类型工具允许我们从一个类型中剔除指定的属性,生成一个新的类型。其语法如下

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

这里的参数解释:

  • T:原始类型,从这个类型中我们要剔除属性。
  • K:属性名或属性名组成的联合类型,表示要从 T 中移除的属性。

举个例子,假设有一个 Person 类型:

type Person = {name: string;age: number;address: string;
};

如果我们想创建一个不包含 address 属性的新类型 PersonWithoutAddress,可以使用 Omit

type PersonWithoutAddress = Omit<Person, 'address'>;

这样 PersonWithoutAddress 类型就只包含 nameage 两个属性了。

等价于:

type PersonWithoutAddress = {name: string;age: number;
};

Pick

Pick 类型工具与 Omit 正好相反,它允许我们从一个类型中选取指定的属性,生成一个新的类型。其语法如下:

type Pick<T, K extends keyof T> = {[P in K]: T[P];
};

这里的参数解释:

  • T:原始类型,从这个类型中我们要挑选属性。
  • K:属性名或属性名组成的联合类型,表示要从 T 中选取的属性。

继续以上面的 Person 类型为例,如果我们想创建一个只包含 nameage 属性的新类型 PersonNameAndAge,可以使用 Pick

type PersonNameAndAge = Pick<Person, 'name' | 'age'>;

这样 PersonNameAndAge 类型就只包含 nameage 两个属性了。

等价于:


type PersonNameAndAge = {name: string;age: number;
}

总结

  • Omit 用于从一个类型中剔除指定属性,生成一个新类型。
  • Pick 用于从一个类型中选择指定属性,生成一个新类型。

这两个类型工具在 TypeScript 中非常有用,可以帮助我们更精确地定义和操作类型,使得代码更具表现力和安全性,也能达到一定的复用性。

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

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

相关文章

spring和springboot的关系是什么?

大家好&#xff0c;我是网创有方的站长&#xff0c;今天给大家分享下spring和springboot的关系是什么&#xff1f; Spring和Spring Boot之间的关系可以归纳为以下几个方面&#xff1a; 技术基础和核心特性&#xff1a; Spring&#xff1a;是一个广泛应用的开源Java框架&#…

【深度学习基础】`view` 和 `reshape` 的参数详解

目录 基本概念参数详解 示例view 和 reshape 在具体应用中的参数解释参数解释 更多示例高维张量示例非连续内存示例 总结 基本概念 view 和 reshape 都用于调整张量的形状&#xff0c;它们的参数是新的形状&#xff0c;每个维度的大小可以指定为具体的数值或者 -1。-1 表示这个…

计算机类主题会议推荐之——AIIIP 2024

【ACM出版 |IEEE&ACM院士、CCF杰出会员担任组委| 往届会后4个月检索 】 第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence and Intelligent Information Processing 中国-天…

uniapp部署服务器,uniapp打包H5部署服务器,uniapp将config.js抽离

目录 步骤一.在static文件夹下新建config.js文件 config.js文件说明 在config.js中放入使用的请求的接口地址,资源路径等 congfig.js中的变量在页面中如何使用 步骤二.manifest.json配置 1.在项目根目录(与app.vue同级)创建template.h5.html文件 2.在manifest.json配置刚刚创…

全面体验ONLYOFFICE 8.1版本桌面编辑器

ONLYOFFICE官网 在当今的数字化办公环境中&#xff0c;选择合适的文档处理工具对于提升工作效率和团队协作至关重要。ONLYOFFICE 8.1版本桌面编辑器&#xff0c;作为一款集成了多项先进功能的办公软件&#xff0c;为用户提供了全新的办公体验。今天&#xff0c;我们将深入探索…

深入探索STM32的SPI功能:W25Q64 Flash存储器全攻略

摘要 随着嵌入式系统对存储需求的增长&#xff0c;选择合适的存储设备变得尤为重要。W25Q64 Flash存储器以其8Mbit的存储容量和SPI接口的便捷性&#xff0c;成为STM32微控制器项目中的优选存储方案。本文将深入探索STM32的SPI功能&#xff0c;提供W25Q64 Flash存储器的全面集成…

如何成为-10x工程师:反向教学大数据开发实际工作中应如何做

10x 工程师可能是神话&#xff0c;但 -10x 工程师确实存在。要成为 -10x 工程师&#xff0c;只需每周浪费 400 小时的工程时间。结合以下策略&#xff1a; 目录 如何使 10 名工程师的输出无效化改变需求大数据开发示例 创建 400 小时的繁忙工作任务示例大数据开发示例 创建 400…

WPF UI交互专题 界面结构化处理 查看分析工具Snoopy 逻辑树与视觉树 平面图像 平面图形 几何图形 弧线 01

1、开发学习环境 2、XAML界面结构化处理 3、逻辑树与视觉树 4、基于XAML的标签扩展方式 5、基础控件应用分析 6、控件常用属性与事件总结 7、常用控件特别属性说明 8、平面图形控件与属性 9、平面几何图形 10、弧线的处理过程 WPF项目-XAML 项目表现形式 项目结…

threadX netX 创建/删除 IP实例,使能 ARP地址解析

创建IP实例 函数原型 UINT nx_ip_create( NX_IP *ip_ptr, CHAR *name, ULONG ip_address, ULONG network_mask,NX_PACKET_POOL *default_pool,VOID (*ip_network_driver)(NX_IP_DRIVER *), VOID *memory_ptr,ULONG memory_size,UINT priority);参数&#xff1a; ip_ptr&…

Sectigo或RapidSSL DV通配符SSL证书哪个性价比更高?

在当前的网络安全领域&#xff0c;选择一款合适的SSL证书对于保护网站和用户数据至关重要。Sectigo和RapidSSL作为市场上知名的SSL证书提供商&#xff0c;以其高性价比和快速的服务响应而受到市场的青睐。本文将对Sectigo和RapidSSL DV通配符证书进行深入对比&#xff0c;帮助用…

C#给SqlSugar封装一个单例类

.NET兼职社区 可以直接用&#xff0c;轻量方便&#xff0c;无需重复造轮子。 这里只对CRUD进行封装&#xff0c;我的应用比较简单。 using SqlSugar; using System.Collections.Generic;namespace MusicApp.Assist {internal class SqlSugarAssist{private static readonly ob…

Scrapy框架与其他Python爬虫库的对比分析

在当今互联网高速发展的时代&#xff0c;数据的价值也越来越凸显&#xff0c;因此爬虫技术也越来越受到关注和重视。python 爬虫库是爬虫开发中最常用的工具之一&#xff0c;而 scrapy 框架就是其中比较流行的一个。本文将会对 scrapy 框架和其他 python 爬虫库进行对比分析。 …

Firefox 编译指南2024 Windows10- 定制化您的Firefox(四)

1. 引言 定制化您的Firefox浏览器是一个充满乐趣且富有成就感的过程。在2024年&#xff0c;Mozilla进一步增强了Firefox的灵活性和可定制性&#xff0c;使得开发者和高级用户能够更深入地改造和优化浏览器以满足个人需求。从界面的微调到功能的增强&#xff0c;甚至是核心代码…

我在高职教STM32——GPIO入门之按键输入(2)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

【前端】Web操作文件的可能性——浅谈一下File System Api

Web操作文件的可能性——浅谈一下File System Api 随着Web技术的发展&#xff0c;现代Web应用程序越来越多地需要与用户的本地文件系统交互。文件系统API&#xff08;File System API&#xff09;为开发者提供了一组标准和接口&#xff0c;使得Web应用程序可以像本地应用程序一…

240628_昇思学习打卡-Day10-SSD目标检测

240628_昇思学习打卡-Day10-SSD目标检测 今天我们来看SSD&#xff08;Single Shot MultiBox Detector&#xff09;算法&#xff0c;SSD是发布于2016年的一种目标检测算法&#xff0c;使用的是one-stage目标检测网络&#xff0c;意思就是说它只需要一步&#xff0c;就能把目标检…

【C++题解】1466. 等差数

问题&#xff1a;1466. 等差数 类型&#xff1a;简单循环 题目描述&#xff1a; Peter 同学刚刚在学校学习了等差数列的概念。 等差数列&#xff0c;指的是一组数&#xff0c;这些数连续 2 个数的差值是相等的&#xff0c;比如&#xff1a;123&#xff0c;135&#xff0c;852…

SerDes介绍以及原语使用介绍(2)OSERDESE2原语仿真

文章目录 前言一、SDR模式1.1、设计代码1.2、testbench代码1.3、仿真分析 二、DDR模式下2.1、设计代码2.2、testbench代码2.3、仿真分析 三、OSERDES2级联3.1、设计代码3.2、testbench代码3.3、代码分析 前言 上文通过xilinx ug471手册对OSERDESE有了简单的了解&#xff0c;接…

Spring Batch批量处理数据

Spring Batch 是一个由 Pivotal Software&#xff08;原 SpringSource&#xff0c;现属于 VMware&#xff09;开发的批处理框架&#xff0c;它是 Spring 框架的一部分&#xff0c;主要用于创建高效、健壮的批量数据处理应用。Spring Batch 设计用于处理大量的记录&#xff0c;例…

PreparedStatement 与Statement 的区别,以及为什么推荐使用 PreparedStatement ?

在Java中&#xff0c;PreparedStatement和Statement都是用于执行SQL语句的重要接口&#xff0c;但它们在功能、安全性和性能上有着显著的差异。理解这些差异对于编写高效且安全的数据库应用程序至关重要。 Statement&#xff1a;基本的SQL执行者 首先&#xff0c;让我们从Sta…