typescript-工具泛型

TypeScript(十一)泛型工具类型 前面的文章我们对泛型的用法有了大概的认识,也通过泛型实现了一些常用的类型,那么这篇文章将深入了解一下泛型的工具类型的使用及实现,那么话不多说,我们直接开始。 阅读详情

工具泛型

学习工具泛型源码,可以帮我们更好地做类型编程

typeof

获取变量的类型

keyof

keyof T,获取类型 T 的所有键组成的联合类型,keyof 也被称为 索引类型查询操作符

interface IPerson {
  id: string;
  age: number;
}

type IPersonKeys = keyof IPerson; // 'id' | 'age'
type IPersonKeys = IPerson[keyof IPerson]; // string | number

[]

索引访问操作符,可以进行索引访问

interface T {
  K: string;
}

type TypeK = T[K]; // string

in

可以对联合类型进行遍历。通过 [K in Keys] 可以实现映射类型,从旧类型中创建新类型的一种方式

type Index = 'a' | 'b' | 'c'
type FromIndex = { [K in Index]?: number }

const index_1: FromIndex = { b: 1, c: 2 }
const index_2: FromIndex = { b: 1, d: 3 } // 报错,不能添加d属性

extends

  1. 用来扩展已有的类型
interface IAnimal = {
  name: string;
}
interface ICat extends IAnimal {
  action: string;
}

// 等价于
type ICat = IAnimal & {
  action: string;
}
  1. 对类型进行条件限定,比如判断两种类型是否相等:
type IsEqualType<A, B> = A extends B ? (B extends A ? true : false) : false;
  1. 对于 T extends U ? X : Y 来说,还存在一个特性,当 T 是一个联合类型时,会进行条件分发。这一点对于理解后面的工具泛型很关键
type Demo = string | number;
type IsString<T> = T extends string ? "yes" : "no";

type IsDemoString = IsString<Demo>; // 'yes' | 'no';

实际上,extends 的转换类似于下面这一步:

(string extends string ? 'yes' : 'no') | (number extends string ? 'yes' : 'no')

infer

在有条件类型的 extends 子语句中,允许出现 infer 声明,它会引入一个待推断的类型变量,简单说就是用它取到函数返回值的类型来使用

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;

readonly

将属性标记为只读

工具泛型

Record

将 K 中所有的属性的值转化为 T 类型

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

Pick

从 T 中取出一系列 K 的值

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

Exclude

从 T 中排除 U

type Exclude<T, U> = T extends U ? never : T;

Extract

从 T 中提取 U

type Extract<T, U> = T extends U ? T : never;

Omit

相当于 Pick + Exclude, 实现忽略对象某些属性功能,Pick+Exclude

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

Partial

将 T 中的属性都变为可选属性

type Partial<T> = { [k in keyof T]?: T[k] };

Required

将 T 中的属性都变为必选属性

type Required<T> = { [k in keyof T]-?: T[k] };

Readonly

将 T 中的属性都变为只读属性

type Readonly<T> = { readonly [k in keyof T]: T[k] };

Mutable

将 T 中的属性都变为可读属性

type Mutable<T> = { -readonly [k in keyof T]: T[k] };

ReturnType

获取函数的返回值的类型

type ReturnType<T extends (...args: any[]) => any> = T extends (
  ...args: any[]
) => infer R
  ? R
  : never;

Parameters

获取函数的参数的类型

type Parameters<T extends (...args: any[]) => any> = T extends (
  ...args: infer P
) => any
  ? P
  : never;
TypeScript泛型工具实战:从Partial到Omit的类型体操 本文深入探讨TypeScript泛型工具的实际应用,从Partial到Omit的类型操作技巧。通过具体示例展示如何利用这些工具简化开发流程,提升类型安全性,特别适合处理表单数据、API交互等常见场景。掌握这些类型体操技巧能显著提高TypeScript开发效率。 阅读详情

相关推荐

Ansys 19 Mechanical 流体密封分析

start point是一个特殊的概念,在仿真中ansys将从start point开始搜索会发生流体渗漏的点,可以简单理解为从start point开始,向四周逐个节点比较节点上的接触压紧力与流体压力,如果流体压力大于压紧力,则发生渗漏。事实上此处的最后一个参数是指定start point类型的,为1代表这是一个“open”的start point。在通常情况下,如果不人为指定start point,程序会自动寻找指定流体压力面的“边界”,对于二维情况,就是曲线的两个端点,对于三维情况就是曲面的边线。

Dio980的博客 1537

【前端进阶】-TypeScript高级类型 | 泛型约束、泛型接口、泛型工具类型

**前言** >博主主页👉🏻[蜡笔雏田学代码](https://blog.youkuaiyun.com/xuxuii?spm=1011.2415.3001.5343) >专栏链接👉🏻[【TypeScript专栏】](https://blog.youkuaiyun.com/xuxuii/category_11979920.html) >前两篇文章讲解了TypeScript的一些高级类型 >详细内容请阅读如下:🔽 >[【前端进阶】-TypeScript高级类型 | 交叉类型、索引签名类型、映射类型](https://blo

xuxuii的博客 1万+

ARM架构下Horizon Client安装全攻略:从依赖检查到环境变量配置

本文详细介绍了在ARM架构设备上安装VMware Horizon Client的全过程,包括依赖检查、软件包获取、系统部署和环境变量配置。特别针对华为鲲鹏等ARM平台,提供了从基础准备到性能优化的完整指南,帮助用户高效完成虚拟桌面客户端的部署与调优。

github5actions的博客 556

TypeScript 泛型的理解及泛型工具的使用

TypeScript 中泛型的理解, 以及泛型工具的使用

weixin_57337549的博客 1990

HALCON基于描述符的模板匹配(未标定)

HALCON基于不标定描述符的模板匹配

king_linj的博客 892

绝缘检测原理和绝缘电阻计算方法

绝缘检测的目的就是计算绝缘电阻,当绝缘电阻低于某个阈值,则很可能会造成电池短路、漏电,威胁人员安全

m0_56208280的博客 4万+

TypeScript - 泛型工具

本文主要记录下 TypeScript 中常用的泛型工具,日常学习总结篇。

lhz_333的博客 2043

低成本实现webhook接收端[python]

Webook本质上也是API,只不过是反向调用,即前端不主动发送请求,完全由后端推送。简单来说,Webhook是一个接受HTTP POST或是GET,PUT,DELETE的URL,一个实现了Webhook的API提供商就是在当事件发生的时候会向配置的URL发送信息,与请求-响应式不同,使用Webhook可以实时接收到变化。Ps:Webhook可能会发出大量的请求,确保接受的URL不被泄露或者应用能及时处理这些请求。

锡城小凯的博客 1万+

TypeScript 泛型工具类型

TypeScript 泛型工具类型在实际项目中的应用在TS中内置了一些常用的工具类型, 用来简化我们TS中的一些常见操作 这些泛型工具类型都是基于泛型实现的, 并且是内置的, 我们也可以直接在代码中使用。

夜空孤狼啸的博客 814

【基础演练】Playwright 极简复习:作为 AI-RPA 底座的 Playwright 核心用法

摘要: 2026年,Playwright已从测试工具升级为AI-RPA标准执行底座,周下载量超3300万,被browser-use等AI Agent项目广泛采用。其核心架构通过Playwright Server实现多浏览器协议适配,支持远程连接与高并发隔离(BrowserContext)。自动等待机制显著提升稳定性,但高频交互场景可能需直接使用CDP协议。Playwright凭借跨浏览器兼容性、轻量级隔离和微软官方支持,成为测试、RPA和AI Agent领域的事实标准,未来将主导对话式自动化市场。

ZDQ58818的博客 238

【RV1126/RV1109学习笔记】#基础篇#(2)基础入门使用

一、调试方式 1、串口调试 2、ADB调试 3、网络调试 二、基础外设使用 音频使用(aplay,arecord,amixer) 三、WIFI连接 四、屏幕背光控制

丨晋丨 1864

Typescript 内置泛型工具类型

本文介绍了TypeScript常用的内置泛型工具类型及其应用场景。主要内容包括:Partial、Required、Readonly用于属性修饰转换;Record用于动态键名对象;Pick和Omit用于属性选择与排除;Exclude和Extract用于联合类型过滤;Parameters和ReturnType用于函数类型操作;以及映射类型、条件类型等实现原理分析。这些工具类型可组合使用,适用于表单验证、API响应处理等场景,能显著提升代码类型安全性和开发效率。

putengzhe0231的博客 385

文末含资料链接和视频讲解!YOLOv8+RepVGG+QueryDet小目标检测终极指南:从理论到实战,突破遥感图像检测难题

QueryDet(Query Detection)机制代表了目标检测领域的一个重要范式转变。传统的目标检测方法基于anchor或anchor-free的密集预测,需要为图像中的每个可能位置生成预测。而QueryDet采用了稀疏查询的方式,通过少量的可学习查询向量来直接预测目标。 这种设计灵感来源于Transformer架构中的注意力机制。在自然语言处理中,Transformer通过query-key-value机制实现了高效的序列建模。QueryDet将这一思想引入到目标检测中,将检测问题转化为查询匹配问

FJN110的博客 387

TypeScript 中的泛型工具详解

TypeScript提供了多种泛型工具类型,用于灵活操作和转换类型。基础工具类型包括Partial(使属性可选)、Required(使属性必选)、Readonly(使属性只读)、Record(构造特定属性类型)、Pick(选取部分属性)和Omit(排除部分属性)。条件类型工具如Exclude(排除特定类型)、Extract(提取特定类型)和NonNullable(排除null和undefined)。函数相关工具如ReturnType(获取返回值类型)、Parameters(获取参数类型)、Construct

分享前端工程化、AI 应用、Agent 开发与大模型实践! 924

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【TypeScript】泛型工具

对于使用extends关键字的条件类型(即上面的三元表达式类型),如果extends前面的参数是一个泛型类型,当传入该参数的是联合类型,则使用分配律计算最终的结果。分配律是指,将联合类型的联合项拆成单项,分别代入条件类型,然后将每个单项代入得到的结果再联合起来,得到最终的判断结果。在A3的定义中,给T传入的是’x’和’y’的联合类型。总之,满足两个要点即可适用分配律:第一,参数是泛型类型,第二,代入参数的是联合类型。,满足分配律,于是’x’和’y’被拆开,分别代入。获取函数的返回值的类型。

小秀的博客 1375

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

TypeScript学习笔记之泛型工具

TypeScript 泛型工具:提升类型灵活性和重用性泛型工具是一组预定义的泛型类型和操作符,用于操作和转换类型。它们可以帮助我们编写更灵活、更通用的代码,并提高代码的可读性和可维护性。

qq_39237831的博客 648

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TypeScript实用笔记(三):泛型<T>的使用 && <T>的12种工具类型的使用

typescript中泛型的使用,以及12种工具类型[Partial,Required,Readonly,Record,Pick,Omit,Extract,Exclude,NonNillable,ReturnType,InstanceType,ThisType]的使用

weixin_43239068的博客 1564

TypeScript 常用泛型工具函数

简单来说,泛型工具类型就是用来操作类型的函数。普通函数是(如map把数组转换成新数组)。泛型工具类型是(如Partial把所有属性变成可选)。TypeScript 内置了大量开箱即用的工具类型,覆盖了前端开发 90% 的场景。内置的很好用,但有时候我们需要更强大的功能。通过泛型递归和条件类型,我们可以自己造“轮子”。

这是个栗子的博客 631

typescript常用的泛型工具类型

Partial Readonly Pick Record

weixin_55869175的博客 612

TypeScript 内置泛型工具类型

(如提取、过滤、修改类型),仅作用于类型系统,不影响运行时。这类是 TS 提供的 “工具函数式” 泛型类型,用于。:创建一个对象类型,键类型为。的参数类型,返回元组类型。的所有属性变为必选(与。(替代手动写索引签名)。的所有属性变为可选。的所有属性变为只读。

gcyaozuodashen的博客 184

typescript学习重难点总结--可索引类型,interface, type, 泛型, keyof,工具泛型等

ts代码编译原理 核心原则之一:对值所具有的结构进行类型检查(鸭式辩型) ts数据类型 ts的数据类型基础的有string, number, boolean, any, null, undefined, never, 数组类型等等等。 ts里还有一些内置类型 例如在html中DOM元素的一些类型,实现复制功能时用到过HTMLTextAreaElement, Selection,Range等 点击...

haoyanyu_的博客 3917

学习TypeScript25(TS进阶用法-泛型工具2)

Readonly 我们昨天学的Partial 很像只是把? 替换成了 Readonly type Readonly<T> = { readonly [P in keyof T]: T[P]; }; keyof 是干什么的? in 是干什么的? ? 是将该属性变为可选属性 T[P] 是干什么的? 1 keyof我们讲过很多遍了 将一个接口对象的全部属性取出来变成联合类型 2 in 我们可以理解成for in P 就是key 遍历 keyof T 就是联合类型的每一项

qq1195566313的博客 5991

typescript内置工具泛型全解析

TypeScript 的内置泛型工具极大地增强了类型系统的表达能力,使得类型定义更加灵活和精确。掌握这些工具可以帮助开发者编写更健壮、可维护的代码。

LQS5858的博客 450

TypeScript 提供的“类型工具箱”——工具泛型(Utility Types)

工具泛型是 TypeScript 提供的“类型工具箱”,帮助你快速操作类型,避免重复代码。它们本质是“类型的函数”,输入一个类型,输出另一个类型。通过组合这些工具泛型,可以写出更灵活、更安全的类型代码。

weixin_48953950的博客 411

TypeScript进阶知识之泛型相关(关键字【keypf、typeof、in、extend、infer】、泛型工具类型【Partial、Required、Readonly、Record……】)

TypeScript进阶知识之泛型相关(关键字【keypf、typeof、in、extend、infer】、泛型工具类型【Partial、Required、Readonly、Record、Exclude、Extract、Pick、Omit、NonNullable、ReturnType、Parameters】)

qq_48617322的博客 663

TypeScript学习笔记 | 泛型 - 泛型的应用 - 泛型工具类 - extends - infer用法

泛型指是在定义函数或者类时并不知道类型,在被使用时才知道数据的类型。泛型先起到一个占位的作用,在使用时接收传递过来的类型。也可以将泛型类比于参数,参数接收的是变量值,泛型接收的是类型。T被称为类型变量(type variable),T作为参数泛化成具体类型的作用叫做类型参数化。说明1.泛型和变量一样,可以指定多个。比如,中间使用逗号隔开。2.泛型和变量一样,可以指定默认值。比如。3.泛型定义的位置,定义的位置一般在标识符的后面。比如。

好好学习天天向上 531
上一篇: typescript-基础入门
下一篇: typescript-tsconfig文件解释
__lucas
博客等级 码龄9年 329粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值