Typescript高级: 深入理解Omit类型和Pick类型

Typescript高级: 深入理解Partial类型和Required类型 在 TypeScript 中,Partial 是一个非常实用的内置类型工具它允许我们轻松地将某个类型的所有属性变为可选的这对于处理可能缺少某些属性的对象时特别有用然而,Partial 背后的概念和它在实际开发中的应用场景远比表面看起来要丰富Partial 是 TypeScript 中一个非常实用的类型工具,它允许我们轻松地将类型的所有属性变为可选的通过深入理解 Partial 的原理和使用场景,我们可以更有效地利用它来提高代码的可读性和可维护性。 阅读详情

概述

  • Omit 是一个非常实用的工具类型,它的功能是从一个已知的对象类型中排除某些属性,并返回一个新的对象类型
  • 这在处理复杂对象结构、实现更严格的类型限制时非常有用
  • Pick 的工作原理基于 TypeScript 的映射类型
  • 当我们使用 Pick<T, K> 时,TypeScript 会遍历 K 中的每一个属性
  • 并在新的类型中创建一个同名的属性
  • 其类型与原始类型 T 中的对应属性相同

Omit 用法

1 )基本语法

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
  • Omit 并没有内置在标准库中,但我们可以很容易地定义它,如上
  • 这里我们使用了另外两个工具类型:Pick 和 Exclude
  • Pick 用于从一个对象类型中选择某些属性
  • 而 Exclude 则用于从一个类型中排除某些属性

2 )使用示例

type UserInfo = {  
  id: number;  
  name: string;  
  email: string;  
  password: string;  
};

type UserInfoWithoutPassword = Omit<UserInfo, 'password'>;  

// 相当于:  
// type UserInfoWithoutPassword = {  
//   id: number;  
//   name: string;  
//   email: string;  
// };
  • 这里,我们想创建一个不包含密码的用户信息类型,我们可以使用 Omit

Omit 工作原理

  • Omit 的工作原理基于 TypeScript 的类型操作和映射类型(Mapped Types)
  • 当我们使用 Omit<T, K> 时,TypeScript 会执行以下步骤:
    • 解析 keyof T:获取类型 T 的所有属性键的联合类型
    • 使用 Exclude<keyof T, K>:从 keyof T 中排除 K 指定的属性键
    • 使用 Pick<T, ...>:基于排除后的属性键集合,从 T 中选择对应的属性,并生成一个新的类型

高级用法

  • 除了基本的用法之外,Omit 还可以与其他工具类型结合使用,以实现更复杂的类型操作

  • 例如,我们可以使用 Omit 与 Partial 结合,来创建一个类型,其中的某些属性是可选的,而其他属性则是必需的

    type PartialUserInfo = Partial<Omit<UserInfo, 'id'>>;
    // 相当于:
    // type PartialUserInfo = {
    //   name?: string;
    //   email?: string;
    //   password?: string;
    // };
    
  • 在上面这个例子中,除了 id 属性之外的所有属性都变成了可选的

Pick 概述

  • 在 TypeScript 的类型系统中,工具类型(Utility Types)为我们提供了一系列预定义的、可重用的类型转换机制
  • 其中,Pick 是这些工具类型中非常实用且基础的一个,它允许我们从现有的类型中选择出一部分属性来创建一个新的类型
  • Pick 工具类型接受两个类型参数:第一个参数 T 是我们要从中选择属性的原始类型,第二个参数 K 是 T 类型中属性的子集,这些属性将被包含在生成的新类型中

Pick 基本语法

type Pick<T, K extends keyof T> = {
    [P in K]: T[P];
};
  • 这里使用了 TypeScript 的映射类型(Mapped Types)语法
  • [P in K]: T[P]; 表示对于 K 中的每一个属性 P,都将其复制到新类型中
  • 并且其类型与原始类型 T 中的对应属性相同

使用示例

  • 假设我们有一个 Person 类型,它包含了多个属性:
    type Person = {
        name: string;
        age: number;
        address: string;
        phoneNumber: string;
    };
    
    type PersonDetails = Pick<Person, 'name' | 'age'>;
    
    // 相当于:  
    // type PersonDetails = {  
    //     name: string;  
    //     age: number;  
    // };
    

Pick 工作原理

  • Pick 的工作原理基于 TypeScript 的映射类型
  • 当我们使用 Pick<T, K> 时,TypeScript 会遍历 K 中的每一个属性
  • 并在新的类型中创建一个同名的属性, 其类型与原始类型 T 中的对应属性相同

Pick 高级用法

  • 除了基本的用法之外,Pick 还可以与其他工具类型结合使用
  • 以实现更复杂的类型操作

1 ) 与 Omit 结合使用

  • 我们可以先使用 Pick 选择出需要的属性
  • 然后再使用 Omit 排除掉不需要的属性
  • 虽然直接使用 Pick 就可以达到目的
  • 但有时候这样的组合能更清晰地表达我们的意图
type PersonWithoutAddress = Omit<Person, 'address'>;  
// 或者使用 Pick 和 Exclude 来达到相同的效果  
type PersonWithoutAddressAlternative = Pick<Person, Exclude<keyof Person, 'address'>>;

2 ) 与条件类型结合使用

type IncludePhoneNumber<T extends Person, Include extends boolean> =   
    Include extends true ? Pick<T, 'phoneNumber' | keyof Omit<T, 'phoneNumber'>> : Omit<T, 'phoneNumber'>;  
  
// 使用示例  
type PersonWithPhone = IncludePhoneNumber<Person, true>; // 包含 phoneNumber  
type PersonWithoutPhone = IncludePhoneNumber<Person, false>; // 不包含 phoneNumber
  • 还可以将 Pick 与条件类型(Conditional Types)结合使用

  • 根据某些条件来动态地选择属性

  • 在这个例子中,我们定义了一个泛型工具类型 IncludePhoneNumber

  • 它接受一个 Person 类型的扩展和一个布尔值 Include

  • 根据 Include 的值,我们使用 Pick 或 Omit 来决定是否包含 phoneNumber 属性

  • 总结

    • Pick 是 TypeScript 中一个非常基础和实用的工具类型
    • 它允许我们轻松地从现有的类型中选择出部分属性来创建新的类型
    • 通过深入了解其背后的原理和使用方法
    • 我们可以更加灵活地处理复杂的类型结构
    • 提高代码的可读性和可维护性
    • 在实际开发中,我们可以结合其他工具类型
    • 如 Omit、条件类型等,来实现更复杂的类型操作
TypeScript中的Omit、Pick、Partial、Required类型 最近使用到了Omit、Pick、Partial类型,之前也没写过,这篇说下typescript中提供的Omit、Pick、Partial、Required类型 阅读详情

相关推荐

SAP ABAP 平台信任 Identity Provider 的完整配置思路

摘要:SAP S/4HANA中的SAML2配置不仅是技术操作,更涉及复杂的信任体系建立。作为Service Provider,ABAP系统需验证Identity Provider的SAML断言可信度,涉及证书链维护、元数据来源验证等关键环节。配置前需确保IdP可用,并正确导入证书到STRUST。配置时可通过手动或XML上传方式建立信任关系,需注意别名管理和证书轮换策略。数字签名和加密需根据实际需求谨慎配置,而非机械启用所有选项。生产环境中,完整的证书信任链和算法兼容性检查至关重要,避免因配置不当导致系统不可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 739

TypeScript 实用工具类型之 Omit 类型

在本文中,我们将讨论 TypeScript 中使用 `Omit` 的对象类型转换。这是 TypeScript 实用工具类型系列的第二部分。

p1967914901的博客 4087

音频功放电路大全

作为硬件工程师,特别是做纯粹模拟电路、应用于音频功放的工程师,对于A类,B类,AB类,D类,G类,H类,T类功放应该特别熟悉。大多数工程师或许只知道其中的一部分、或者知道大概,为了让更多的工程师掌握更加详尽的音频功放知识,下文对以上说的音频功放做详细的说明。 功放,顾名思义,就是功率放大的缩写。与电压或者电流放大来说,功放要求获得一定的、不失真的功率,一般在大信号状态下工作,因此,功放电路一般包含电压放大或者电流放大电路没有的特殊问题,具体表现在:①输出功率尽可能大;②通常在大信号状态下工作;③非线性失真突

ltqdxl的博客 6597

TypeScript 实用工具类型之 Pick 类型

这是一个关于 TypeScript 中的对象类型转换的系列。在本系列中,我们首先将了解什么是对象类型转换、需要转换的情况以及它们与对象接口扩展的区别。然后,我们将仔细研究 TypeScript 提供的各种促进对象类型转换的工具类型,比如:`Pick`、`Omit`和 `Partial`。

p1967914901的博客 4178

告别命令行恐惧!用TBtools的MCScanX插件,5分钟搞定拟南芥和水稻的基因组共线性分析

本文介绍如何利用TBtools的MCScanX插件快速完成拟南芥和水稻的基因组共线性分析,无需命令行操作,5分钟即可生成专业可视化结果。通过图形化界面简化传统MCScanX的复杂流程,特别适合非生物信息背景的研究者,显著提升基因组数据分析效率。

dianzhuique8587的博客 378

海天注塑机弘讯控制器Modbus数据采集实战指南

工业设备数据采集是MES系统、设备监控和工艺追溯的基础,其中注塑机联网是车间数字化的关键环节。Modbus协议作为工业通信的事实标准,以简单、开放、低成本的优势,成为海天注塑机弘讯控制器对外提供数据的主要方式。理解控制器型号与通信参数、捋清寄存器点位表与字节序规则,是稳定采集的前提。通过RS485串口或以太网轮询,可以实时获取产量、温度、压力、报警等关键数据,进而支撑OEE统计、质量追溯与异常监控。本文基于实战项目,以海天注塑机弘讯控制器为例,梳理从接线、参数配置到点位验证的完整流程,为现场工程师提供一套可

weixin_28733777的博客 907

TypeScript-Omit/Pick

类型在实际开发中非常有用,尤其是在需要从一个大的接口中提取特定属性时。Omit:通常用于创建一个没有某些属性的新类型,这在需要排除某些敏感数据或不需要的字段时很有用。Pick:通常用于创建一个包含特定属性的新类型,这在需要精简对象或传递特定属性集时非常有用。的字面意思可以理解为“送出”或“放置出去”,在英语中演变为“省略”或“遗漏”的意思。,并创建一个新的类型,该类型仅包含这些被选择的属性及其类型。的含义紧密相关,即从一个对象类型中“省略”某些属性。Pick:创建一个仅包含指定属性的新类型。

Bruce__taotao的博客 1966

DDR Study - LPDDR5 Power-Up and Initialization Sequence

本文深入解析LPDDR5内存的上电初始化流程,涵盖电源斜坡、复位信号释放和初始化训练等关键阶段。通过实际案例分享,详细探讨了电源轨时序、RESET信号处理、ZQ校准和CA总线训练等核心技术要点,帮助硬件工程师规避常见设计陷阱,确保DDR内存稳定运行。

weixin_42523792的博客 304

Typescript高级类型Record,Partial,Readonly等介绍

Typescript的联合类型、Partial、Pick、Exclude、Omit介绍联合类型Partial的实现原理pick的实现原理Exclude的原理Omit原理 Typescript的联合类型、Partial、Pick、Exclude、Omit介绍 联合类型 /* 首先是联合类型的介绍 */ let a: string | number = '123' // 变量a的类型既可以是string,也可以是number a = 123 Partial (意思是部分的; 不完全的),t

ddp的博客 1万+

分析以太网帧结构_100G以太网接口调试初体验

是的,标题没有多敲一个“0”,明人不说暗话,就是在FPGA上实现100G以太网接口设计。正好参与了实验室某项目中的100G接口的调试,早想写个专栏文章了,由于调试过程中发现了一些硬件问题,导致迟迟没有往前推进,现在问题解决了之后可以简单分享一下100G以太网接口的调试初体验了~(好像DDR4读写测试系列文章还没搞完 )这篇初体验暂时不分多个章节了,基本设计流程与之前发布的“10G以太网接口”系列文...

weixin_39574050的博客 1603

50、压电微泵与技术设备驱动的研究分析

本文研究了压电微泵在弹性微通道中的流体流动特性及技术设备驱动的振动行为。通过建立轴对称流固耦合模型,利用FreeFem++进行数值模拟,分析了不同数量压电致动器和频率对微泵流量的影响,发现多个致动器按特定时序压缩可产生净正向流量,并提出了稳态流量的近似解析公式。同时,针对技术设备驱动系统,探讨了周期性负载引起的强迫振动特性,明确了共振条件及影响因素,并比较了主动、被动和优化设计等振动控制策略。最后展望了实验验证、多物理场耦合与智能控制等未来研究方向,为相关设备的优化设计与高效运行提供了理论支持。

convnet3designer的博客 148

TypeScript中的数据选择艺术:pick和omit操作入门

我们了解了如何使用Pick和Omit来创建更精确的类型,从而提高代码的可读性和可维护性。

十一逐星的博客 1944

使用Gitlab 搭建私有镜像仓库(外置Nginx)

为了让团队尽快使用Gitlab的CI进行工作,必须做好Gitlab的初始化工作,大家都知道拉取镜像由于某些原因,会比较慢,因此构建自己的私有镜像仓库就成为了关键的一步。当然私有镜像仓库的搭建有很多种方式,这里直接使用Gitlab提供的镜像仓库功能。一揽子解决方案比较香。gitlab真的越来越好用了,有了这个镜像仓,也没必要再使用三方的镜像仓库了。Devops 真好用!

网尘的技术专栏 1829

为什么选择SuperGemma4-31b-abliterated-GGUF:3大优势让本地AI开发更高效

SuperGemma4-31b-abliterated-GGUF是为本地硬件打造的高性能AI模型,基于Google Gemma-4-31B-IT进行优化,提供完全无审查的对话体验和强大的技术能力。本文将深入解析这款模型的三大核心优势,帮助开发者快速掌握本地AI部署的高效解决方案。 ## 1. 完全无审查的对话能力,释放创意潜能 🚀 作为本地部署的AI模型,SuperGemma4-31b-ab

gitblog_00025的博客 336

红队攻防渗透技术实战流程:云安全之云原生安全:特权模式和挂载模式

红队云攻防实战1. 什么是云 1. 什么是云

HACKONE的博客 575

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Flow 映射类型(Mapped Types)实战指南:Pick、Omit 与 Record 的实现原理与使用详解

映射类型(Mapped Types)允许你遍历一个对象类型的全部键,并逐一转换每个属性的类型,从而派生出全新的对象类型。Flow 在 2024 年 8 月正式发布这一特性,并同时落地了以映射类型为基础的 `Pick`、`Omit`、`Record` 三个实用工具类型(Utility Types)。本文以 [官方公告博客](https://link.gitcode.com/i/bd2fe0a8919

gitblog_00060的博客 1037

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

[TS 类型体操] 初体验之Pick 与 Omit

1.使用keyof对类型进行提取2.使用 extends 对类型进行限制的两种方法条件约束(Generic Constraints)条件类型(Conditional Types)3.使用 T[P] 来获得类型索引访问类型(Indexed Access Types)4.as never 来将 union 中的元素去除类型断言(Type Assertions)5.使用 in 来进行遍历映射类型(Mapped Types)这是我自己的练题仓库。

军火库 1235

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

TypeScript Omit工具类型实现与应用详解

TypeScript的类型系统通过静态类型检查显著提升了JavaScript代码的可靠性。其中映射类型和条件类型作为核心特性,能够基于现有类型创建新类型,实现类型转换与过滤。Omit作为实用工具类型,通过组合Pick和Exclude,可以安全地从对象类型中排除指定属性,广泛应用于API响应处理、React属性继承等场景。掌握其实现原理涉及keyof操作符、never类型等关键概念,对于构建类型安全的现代前端应用至关重要。本文通过多个工程案例,展示了如何利用类型编程技巧处理敏感字段过滤、组件属性透传等实际问题

weixin_31188927的博客 136

TypeScript 高级工具类型面试指南

一文吃透 TS 七大高频工具类型:Pick、Omit、Partial、Record 等,结合实战场景与拼多多笔试题拆解 Omit 底层原理,从使用到手写实现,搞定 TypeScript 面试考点。

2503_93701293的博客 326

TypeScript面试精讲front-end-interview-questions:类型系统与高级特性的深度剖析

front-end-interview-questions项目是一个全面的前端面试题资源库,包含了HTML、CSS、JavaScript、React、TypeScript等多个领域的面试问题与解答,能帮助候选人在真实面试前测试自己的知识水平,更好更快地准备面试。 ## TypeScript面试核心考点解析 🚀 TypeScript作为JavaScript的超集,已成为现代前端开发的重要技能。

gitblog_00840的博客 433

掌握Type-Challenges:从基础到实战的Pick类型工具完全指南

Type-Challenges是一个专注于提升TypeScript和泛型编程能力的学习项目,通过一系列精心设计的类型推导挑战题目,帮助开发者深入理解和掌握TypeScript的高级类型特性。本文将以其中的Pick类型工具为例,带你从零开始学习如何实现和应用这一基础而强大的类型工具。 [![Type-Challenges项目logo](https://raw.gitcode.com/GitHub_

gitblog_00506的博客 465

玩转TypeScript工具类型(上)

随着前端项目的规模不断变大,多人协同开发已经成为了前端开发的标配,随之而来的就是 TypeScript 被越来越多的项目所使用,这种变化并不是对技术的盲目追求,而是业务驱动下的技术进步,TypeScript 通过对原生 JavaScript 提供强类型加持,在很大程度上提升了代码质量,大大降低了多人协同场景下不同模块接口相互调用可能出现的隐性 bug。本系列分享来源于我日常开发中对 TypeScript 工具类型的一些学习和使用体会,本系列文章分为上中下三篇,通过本系列分享,希望可以达到如下几个目的: 从

youdaotech的博客 508

TypeScript进阶 类型演算与高级内置类型

本文深入探讨了 TypeScript 类型演算的原理和应用。通过使用类型演算,我们可以在编译时对类型进行操作和计算,从而提供更强大的类型系统。通过合理地运用类型推断、条件类型、映射类型等工具,我们可以编写更安全、更健壮的代码,并提高开发效率。希望本文能够帮助读者深入理解 TypeScript 类型演算,并在实际开发中得到应用。

1795

终极TypeScript类型系统指南:从基础到高级特性全解析

TypeScript是JavaScript的超集,它通过强大的类型系统为JavaScript代码提供静态类型检查,帮助开发者在编码阶段捕获错误,提升代码质量和可维护性。本指南将系统讲解TypeScript类型系统的核心概念,从基础类型到高级特性,助你全面掌握这门强大语言的精髓。 ## 一、TypeScript类型系统基础入门 ### 1.1 为什么选择TypeScript类型系统? Type

gitblog_01038的博客 454

TypeScript 中的泛型你真搞懂了吗?

点击上方程序员成长指北,关注公众号回复1,加入高级Node交流群在学习ts源码的时候,发现很多泛型还是看不懂,于是想写一篇文章,总结一下常用的泛型。基础必备知识联合类型vs交叉类型//...

程序员成长指北 1530

TypeScript 高级类型体操:从入门到实战

类型体操(Type Gymnastics)是指利用 TypeScript 的类型系统进行的编程。这是一种在编译时执行的元编程,通过类型操作符和技巧,实现复杂的类型推导和转换。适度使用:复杂类型会增加编译时间添加注释:复杂的类型操作应配上详细注释优先使用内置类型:避免重复造轮子测试类型:使用 type-tests 验证类型行为TypeScript 的类型系统是一个图灵完备的语言,掌握类型体操能够让你在编译期就捕获更多错误,编写出更加健壮和可维护的代码。

freewlt 264
上一篇: Typescript高级: 深入理解Partial类型和Required类型
下一篇: Typescript高级: 深入理解extends keyof语法
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值