当前位置: 首页 > news >正文

ts体操训练

1 实现pick

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

2 实现readonly

让interface中所有属性变为可读

type MyReadonly<T> = {readonly [K in keyof T]: T[K]
}

3 TupleToObject

将元组类型转换为对象类型

type tupleToObject<T extends any[]> ={[k in T[number]]: k
} 

4 取出数组的第一项

type First<T extends any[]> = T extends []? never: T[0]T["length"] extends 0 ? never : T[0]T[0] extends T[number]? never: T[0]T extends [ infer First, ...infer Rest]? First : never

5 实现Exclude

type MyExclude<T,U> = T extends U? never:T

6 实现includes

type includes<T extends readonly any[], U> = T extends [infer First, ...infer Rest] ? Equal<First,U> extends true ? true : inlcudes<Rest, U> : false

7 实现ReturnType

type MyReturnType<T> = T extends (...args:any) => infer R ? R : never  

8 构造链式对象

//例子
{name: '123',age: {same: true	}
}type Chainable<T = {}> = {option: <K extends string, V>(key: K extends T ? V extends T[K]? never : K : K, value: V) => Chainable<Omit<T,K> & Record<KV>>get: () => T
}

9 取数组最后一项

type Last<T extends any[]> = T extends [...infer Rest, infer L] ? L : never

10 去除字符串左边的空白

type Space = ' ' | '\n' | '\t'type TrimLeft<S extends string> = S extends `${Space}${infer R}` ? TrimLeft<R> : S

11 将首字母大写

type Capitalize<S extends string> = S extends `${infer x}${infer Rest}` ? `${UpperCase<X>}${Rest}` : S

12 替换匹配的第一个元素

type Replace<S extends string, From extends string, To extends string> = From extends ''? S : S extends `${infer V}${From}${infer R}` ? `${V}${To}${R}` : S

13 向函数中添加参数

type AppendArguments<Fn,A> = Fn extends (...args: infer R) => infer T ? (...args:[...R, A]) => T : never  

14 联合类型的全排列

type Permutation<T,K=T> = [T] extends [never] ? [] : K extends K ? [K, ...Permutation<Exclude<T,K>>] : never 

15 字符串的长度

type LengthOfString<S extends string, T extends string[] = []> = S extends `${infer L}${infer R}` ?  LengthOfString<R,[...T,R]> : T['length']

16 数组扁平化

type Flatten<T extends any[], U extends any[] = []> = T extends [infer L, ...infer Rest] ? L extends any[] ? Flatten<[...L,...Rest],U> : Flatten<[...Rest],[...U,L]> : U

17 向对象中添加元素

需要限定key的范围,对象的键名应为字符串或数字

type AddToObject<T,U extends keyof any,V> = {[K in keyof T | U] : K extends keyof T? T[K]:V
}

18

相关文章:

ts体操训练

1 实现pick type MyPick<T, K extends keyof T> {[P in K]: T[P] }2 实现readonly 让interface中所有属性变为可读 type MyReadonly<T> {readonly [K in keyof T]: T[K] }3 TupleToObject 将元组类型转换为对象类型 type tupleToObject<T extends any[]&…...

int指令

格式&#xff1a; int n,n为中断类型码&#xff0c;它的功能是引发中断过程 CPU执行过程 取中断类型码n&#xff1b;标志寄存器入栈&#xff0c;IF0&#xff0c;TF0&#xff1b;CS&#xff0c;IP入栈&#xff1b;&#xff08;IP&#xff09;&#xff08;n4&#xff09;&…...

Cycling 74 Max for Mac:音乐可视化编程软件

Cycling 74 Max是一款音乐、视觉、互动艺术等领域中广泛使用的编程语言和应用软件&#xff0c;它允许用户创作和控制实时音频和视频效果、交互式应用程序和媒体艺术品等。 Max将程序设计和可视化编程相结合&#xff0c;通过简单的拖拽和连接方式&#xff0c;用户可以将各种功能…...

ROS学习第十二节——话题通信控制小乌龟

1.基操一下 首先打开小乌龟程序和键盘控制程序 rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key 查看话题列表 rostopic list 打开计算图查看具体是那个话题在起作用 rqt_graph 从上图可以看到两个节点之间的话题是 /turtle1/cmd_vel 使用以下命令获…...

matlab点云的可视化-源码复制粘贴即可(一)

一、导入并可视化一个无属性的点云 clc; clear; close; % clear everything% Import a point cloud from a plain text file (run type(Lion.xyz) to see the contents of the file) pc pointCloud(Lion.xyz);% Generate a z-colored view of the point cloud pc.plot;% Set …...

反射-Class类分析

反射相关的主要类 java.lang.Class&#xff1a;代表一个类&#xff0c;Class对象表示某个类加载后在堆中的对象java.lang.reflect.Method&#xff1a;代表类的方法&#xff0c;Method对象表示某个类的方法java.lang.reflect.Field&#xff1a;代表类的成员变量&#xff0c;Fie…...

Let’s Make C++ Great Again——string与常用字符处理函数

文章目录 string使用string类的例子&#xff0c;统计一个字符串中单词的个数&#xff1a;在算法模拟题中翻转字符串&#xff1a;判断回文字符串&#xff1a;字符串查找&#xff1a;字符串替换&#xff1a; 常用字符处理函数strlen()strcpy()strcat()strcmp()toupper() 和 tolow…...

〖Python网络爬虫实战⑰〗- 网页解析利器parsel实战

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付…...

中电金信:生成式AI热潮下,文本智能走向何方?

突破通用人工智能场景&#xff0c;生成式AI正在向全行业应用进攻。 一个脑筋急转弯&#xff0c;几个月前ChatGPT是这样回答的&#xff1a; 然而&#xff0c;仅仅几个月的迭代&#xff0c;它的回答却让人出乎意料。 看似调侃的对比背后实则是无数次模型训练的支撑。基于数据的激…...

探索Linux设备树:硬件描述与驱动程序的桥梁

目录标题 引言&#xff1a;Linux设备树简介 | Introduction: Linux Device Tree Overviewa. 设备树的背景与发展 | Background and Development of Device Treeb. 设备树的作用与意义 | The Role and Significance of Device Tree 设备树语法与结构 | Device Tree Syntax and S…...

UNION ALL用法 以及 UNION ALL和UNION的区别

部分参考自文章&#xff1a; https://blog.csdn.net/a200822146085/article/details/119545374(CC 4.0 BY-SA版权协议)CSDN「我心依依旧」 https://www.1keydata.com/cn/sql/sql-unionall.php SQL Union All SQL指令 UNION ALL用法 UNION ALL 这个指令的目的也是要将两个 SQL 语…...

Ubuntu Linux操作

引言 晚上上课发现桌子上遗留了这本书&#xff0c;水课就看了看学习下&#xff0c;以下内容直接总结知识点 磁盘内存解析 (1)硬盘有数个盘片,每个盘片两个面,每个面一个磁头。 (2)盘片被划分为多个扇形区域即扇区。 (3)同一盘片不同半径的同心圆为磁道。 (4)不同盘片相同半径…...

MongoDB常用语句(CURD)

文章目录 一、数据库操作二、集合操作三、文档操作3.1 插入文档3.2 查询文档3.3 更新文档3.4 删除文档 四、安全认证4.1 创建管理员账号4.2 创建应用数据库用户4.3 启动和连接 (校验方式) 提示&#xff1a;以下是本篇文章正文内容&#xff0c;MongoDB 系列学习将会持续更新 一…...

一篇文章让你彻底学会--节流(并且自己可以手写)

Hi,有的小伙伴们在面试的时候会被要求手写节流函数&#xff0c;很多都被难着了吧&#xff0c;宝贝&#xff0c;那你你没有理解节流函数。 今天&#xff0c;就让我带你攻克它&#xff01; 1.节流 单位时间内&#xff0c;事件触发&#xff0c;最多只执行一次事件回调。 人话:说…...

C++ 形参是类的指针 class * 通过new的方式创建对象

当你在C中使用类指针&#xff08;class *&#xff09;作为函数的形参&#xff0c;并通过 new 关键字创建对象时&#xff0c;这种用法确实会改变类对象的值。原因是你通过指针传递了对象的内存地址&#xff0c;而不是传递对象本身。这意味着在函数内部对对象的任何修改都会直接影…...

手把手教你将项目部署到服务器!

一、导入centos7虚拟机&#xff1a; 打开VMWare&#xff0c;点击“打开虚拟机”&#xff0c;选择centos7.ova之后&#xff0c;选择存储路径&#xff1a; 点击导入&#xff1a; 选择“不再显示此消息”&#xff0c;点击“重试”按钮&#xff1a; 点击“编辑虚拟机设置”&#x…...

OpenHarmony应用开发-ArkUI方舟开发框架简析

方舟开发框架&#xff08;简称ArkUI&#xff09;为OpenHarmony应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实时界面预览工具等&#xff0c;可以支持开发者进行可视化界…...

【Transformer系列(4)】Transformer模型结构超详细解读

前言 前一篇我们一起读了Transformer的论文《Attention Is All You Need》&#xff0c;不知道大家是否真的理解这个传说中的神&#xff08;反正俺是没有~&#xff09; 这两天我又看了一些视频讲解&#xff0c;感谢各位大佬的解读&#xff0c;让我通透了不少。 这篇文章就和…...

Idea启动运行报错:Error:java: 无效的源发行版: 13

最近在做Springboot项目时&#xff0c;常常出现上述错误&#xff0c;小编也不知道怎么回事&#xff0c;到网上找了这个方面的解决办法&#xff0c;但是却发现根本解决不了&#xff0c;最终通过小编多次尝试&#xff0c;终于发现&#xff0c;为什么会报这个错误。(应该是Java版本…...

【元分析研究方法】学习笔记1.形成问题

步骤1 形成问题 该步骤的作用该步骤中需要注意的问题该步骤中部分知识点我的收获 参考来源&#xff1a;库珀 (Cooper, H. M. )., 李超平, & 张昱城. (2020). 元分析研究方法: A step-by step approach. 中国人民大学出版社. 这章内容很简单&#xff1a;①变量的刻画&#x…...

电话号码定位开源工具实战完全指南:从部署到企业应用

电话号码定位开源工具实战完全指南&#xff1a;从部署到企业应用 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirro…...

视频会议不止办公!揭秘它如何重构医疗与教育两大行业

在数字技术全面普及的今天&#xff0c;视频会议早已不再局限于企业内部日常办公沟通这一单一用途&#xff0c;开始深度渗透到各大垂直行业领域中。其中医疗、教育这两大与民生息息相关的领域&#xff0c;更是借助定制化开发的视频会议技术&#xff0c;解决了不少长期存在的行业…...

C++ 中this的秘密

class Test {public:void test() {test1();}void test1() {i = 10...

Java开发者必看:Istio 1.22正式弃用Mixer后,Prometheus指标丢失、日志脱节、Tracing断链问题的90分钟极速修复方案

第一章&#xff1a;Java开发者必看&#xff1a;Istio 1.22正式弃用Mixer后&#xff0c;Prometheus指标丢失、日志脱节、Tracing断链问题的90分钟极速修复方案Istio 1.22 彻底移除了 Mixer 组件&#xff0c;导致依赖其适配器模型的遥测采集链路全面失效。Java 应用在启用 Istio …...

Sqitch 实战教程:如何在 PostgreSQL 中管理数据库变更

Sqitch 实战教程&#xff1a;如何在 PostgreSQL 中管理数据库变更 【免费下载链接】sqitch Sensible database change management 项目地址: https://gitcode.com/gh_mirrors/sq/sqitch Sqitch 是一款功能强大的数据库变更管理工具&#xff0c;专为 PostgreSQL 等数据库…...

MATLAB图像处理实战:5分钟搞定腐蚀膨胀操作(附完整代码)

MATLAB图像形态学处理实战&#xff1a;从原理到代码实现 在数字图像处理领域&#xff0c;形态学操作就像一把精密的"手术刀"&#xff0c;能够对图像进行精细的"雕刻"和"修饰"。无论是去除噪点、填补空洞&#xff0c;还是分离粘连物体&#xff0c…...

别再死记硬背了!一张图帮你理清FS、FT、DTFT、DFS、DFT的来龙去脉

信号处理核心概念可视化指南&#xff1a;从傅里叶级数到离散傅里叶变换的认知地图 当信号处理初学者第一次面对FS、FT、DTFT、DFS、DFT这一系列缩写时&#xff0c;往往会陷入概念迷宫。这些名词背后隐藏着时域与频域、连续与离散、周期与非周期三组关键维度的复杂组合。本文将用…...

SpringBoot整合poi-tl实战:如何优雅导出带动态表格和图片的Word并自动压缩成zip

SpringBoot与poi-tl深度整合&#xff1a;企业级Word动态导出与智能压缩方案 在企业级应用开发中&#xff0c;批量生成结构化的Word文档&#xff08;如报告、合同等&#xff09;并打包分发的需求日益普遍。传统方案往往面临动态内容渲染复杂、性能瓶颈明显、文件管理混乱等痛点。…...

Windows 系统安装 MySQL

访问 MySQL 官方下载页&#xff1a;https://dev.mysql.com/downloads/installer/ 选择 “MySQL Installer for Windows”&#xff0c;推荐下载 “mysql-installer-community-8.0.36.msi”&#xff08;社区版&#xff0c;免费&#xff09; 启动后会看到安装类型选择界面&#xf…...

超越简单拼接:如何用SuperFusion的语义约束,让你的图像融合结果直接服务于目标检测与分割?

超越简单拼接&#xff1a;语义约束如何重塑图像融合的下游任务价值 当红外与可见光图像在自动驾驶感知系统中相遇时&#xff0c;工程师们往往面临一个两难选择&#xff1a;追求视觉上自然的融合效果&#xff0c;还是确保关键目标特征能被检测算法准确识别&#xff1f;传统融合方…...