TypeScript类型体操姿势合集-easy题解

Typescript体操类型学习1 第一反应就是直接取索引为0的一个元素类型来实现, type First = T[0];一样, 要进行空数组判断,如果是空数组,就返回 never 类型, 表示永远不会发生;将一个元组类型转换为对象类型,这个对象类型的键/值和元组中的元素对应。可以返回元组T中所有元素的联合类型,拿到起所有类型后,使用。所以我们不能将空数组,直接返回never,而是返回[]类型。泛型,这个泛型接受一个只读的元组,返回这个元组的长度。,如果满足非空数组,则返回最后一个元素类型。 阅读详情

TypeScript类型体操,核心思想是 通过类型生成新的类型!

记录一下type-challenges的简单题题解,以及解题思路。

仓库地址:https://github.com/type-challenges/type-challenges/blob/main/README.zh-CN.md

博文地址:https://github.com/FrankKai/FrankKai.github.io/issues/262

4 - 实现 Pick

keyof / extends / in

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

其中的<T, K extends keyof T>:K是公共类型,意思是K类型是 keyof T结果的子集。这样做能保证Pick的第二个参数的类型,不在第一个参数的类型,会提示报错

比如,下面代码传了一个在Todo类型上不存在的’invalid’,ts会提示报错” Type ‘“invalid”’ is not assignable to type ‘keyof Todo’.“

// @ts-expect-error
type newType = MyPick<Todo, 'title' | 'completed' | 'invalid'>

interface Todo {
  title: string
  description: string
  completed: boolean
}

https://github.com/type-challenges/type-challenges/issues/11021

7 - 实现 Readonly

readonly

type MyReadonly<T> = { readonly [P in keyof T] : T[P] }
解题思路

在属性名前增加readonly,即可实现只读。

key部分:利用keyof T得到T的键集合,再利用P in 做遍历,并为每个属性名增加readonly标识。

value部分:T[P],复用原先的类型即可。

https://github.com/type-challenges/type-challenges/issues/11104

11 - 元组转换为对象

extends / readonly / in / T[number]

type TupleToObject<T extends readonly any[]> = { [P in T[number]: P }
解题思路

重点是“如何遍历元祖中的每一项?”,可以通过number索引,也就是T[number]获取到每一项。

为什么要T extends readonly any[],这是因为要传入的是一个任意类型的数组,而T[]这种事不合法的,所以需要使用extends去构造一个新的类型。

https://github.com/type-challenges/type-challenges/issues/11105

14 - 第一个元素

extends / never / T[0]

type First<T extends any[]> = T extends [] ? never : T[0];
解析思路

第一项通过T[0]即可表示。

有一个用例需要注意:空数组时,第一项表示为never。

重点是 如何判断空数组?有2种办法:T extends [],T["length"] extends 0。

https://github.com/type-challenges/type-challenges/issues/11107

18 - 获取元组长度

extends / readonly / T['length']

type Length<T extends readonly any[]> = T['length']
解题思路

可以通过T[‘length’]返回长度。

但是前提是构造一个新的类型,T extends any[]

由于元组类型是只读的,所以需要T extends readonly any[]

与11.元组转对象思路一致

https://github.com/type-challenges/type-challenges/issues/11109

43 - Exclude

extends / never

type MyExclude<T, U> = T extends U ? never : T
解题思路

重点是如何移除U,T中的某一项如果在U中(T extends U),返回never移除U,否则返回T。

https://github.com/type-challenges/type-challenges/issues/11111

189 - Awaited #11747

infer / 递归 / Promise<T>

type MyAwaited<T> = T extends Promise<infer P> 
  ? P extends Promise<any>
    ? MyAwaited<P>
    : P
  : never;
解题思路

infer + 递归 + Promise

对于普通的类型,例如type X = Promise,用T extends Promise 即可判断出。
但是对于嵌套类型,例如type Z = Promise<Promise<string | number>>,需要再判断一下P是否为Promise类型,若是的话,递归判断。

https://github.com/type-challenges/type-challenges/issues/11747

268 - If

extends boolean / extends true

if<C extends boolean, T, F> = C extends true ? T : F
解题思路

如何约束泛型为boolean类型?C extends boolean。

如何判断当前泛型为true?C extends true。

https://github.com/type-challenges/type-challenges/issues/11404

533 - Concat

...T 解构

type Contact<T extends any[], U extends any[]> = [...T, ...U]
解题思路

数组类型入参:T extends any[]

泛型解构(核心:通过…解构泛型变量):[…T, …U]

https://github.com/type-challenges/type-challenges/issues/11423

898 - Includes

infer / ...T 解构 / 递归

type MyEqual<X, Y> =
  (<T>() => T extends X ? 1 : 2) extends
  (<T>() => T extends Y ? 1 : 2) ? true : false

type Includes<T extends readonly any[], U> = T extends [infer P, ...infer Rest] 
  ? MyEqual<P, U> extends true 
    ? true
    : Includes<Rest, U>
  : false;
解题思路

解构+infer+递归

判断方式:递归取T中第一项与U进行判断是否相等。

需要实现一个Equal函数,可以使用官方讨论中的https://github.com/microsoft/TypeScript/issues/27024#issuecomment-421529650

https://github.com/type-challenges/type-challenges/issues/11534

3057 - Push

...T 解构

type Push<T extends any[], U> = [...T, U]
解题思路

约束数组类型变量:T extends any[]

类型变量解构: …T

https://github.com/type-challenges/type-challenges/issues/11527

3060 - Unshift

...T 解构

type Unshift<T extends any[], U> = [U, ...T]
解题思路

约束数组类型变量:T extends any[]

类型变量解构: …T

https://github.com/type-challenges/type-challenges/issues/11529

3312 - Parameters

infer

type MyParameters<T extends (...args: any[]) => any> = T extends (...args: infer P) => unknown ? P : never;
解题思路

使用infer表示待推断的类型变量。

由于…args本身已经是元组类型,因此infer P最终推导出的,也是元组类型。

https://github.com/type-challenges/type-challenges/issues/11539

TypeScript体操,手动实现一些TS语法 TypeScript是JavaScript的超集,TypeScript 通过对原生 JavaScript 提供强类型加持,在很大程度上提升了代码质量。但我在刚开始使用TS的时候,真的太难受了。曾经的我爱上前端就是因为前端开发起来方便快捷,JS的类型可以随心所欲,HTML写完立马就能看到效果。而现在,来了TS,边写边学,边学边写,工作量几近与翻倍。但是!0.更好友好的开发体验,提示更友好1.TS声明即文档,减少了查文档的时间2.复杂的大型项目,能够保证数据结构层级不错位。 阅读详情

相关推荐

成分数据的闭合效应对地球化学数据的影响及其解决方案

封闭效应 (Closure Effect),也称为常数和效应 (Constant Sum Effect),是地球化学数据分析中一个需要特别注意的统计现象。它的产生是由于我们通常使用成分数据 (Compositional Data)百分比 (%)百万分率 (ppm)由于这些数据表示的是各组分占总体的比例,它们的总和必然是一个常数 (例如 100% 或 1,000,000 ppm)。这意味着每个元素的含量不是独立的,而是与其他元素的含量相互制约。改变其中一个元素的含量必然会影响其他元素的相对比例。

qq_59349063的博客 1535

typescript 高级类型体操

类型体操练习

jsphpyyds的博客 1061

即梦AI使用教程

摘要: 即梦AI是字节跳动推出的多模态AI创作平台,整合图片、视频、智能编辑功能,基于OmniHuman模型支持中英日三语操作。核心特点包括: 技术升级:4.0版本强化中文语义理解与微观表现力,新增故事分镜生成; 创作功能:支持文本/图片转视频、AI对口型、商业级抠图与多图层融合; 用户友好:移动/网页双端适配,灵感社区复用提示词,剪映生态无缝衔接; 应用场景:覆盖电商换装、虚拟主播、设计融合等需求,未来将开放API拓展生态。 (字数:149)

专业深耕,技术前沿 6303

Typescript进阶之类型体操套路

递归是把问题分解成一个个子问题,通过解决一个个子问题来解决整个问题。形式是不断的调用函数自身,直到满足结束条件。在 TypeScript 类型系统中的高级类型也同样支持递归,在类型体操中,遇到数量不确定的问题,要条件反射的想到递归。比如数组长度不确定、字符串长度不确定、索引类型层数不确定等。如果说学完了提取和构造可以做一些基础的类型体操,那再加上递归就可以实现各种复杂类型体操了。

2401_87546826的博客 1237

使用 DEM 模拟金属烧结过程

了解离散元素法 (DEM) 如何彻底改变烧结工艺,提高制造业的效率和精度。

jkh920184196的博客 1127

从零到一:ASTER L2数据获取的实战避坑指南

本文提供了一份详细的ASTER L2数据获取实战指南,涵盖账号注册、环境配置、数据检索、下载故障排除及后处理等关键步骤。特别针对NASA EarthData平台的隐形门槛和常见陷阱,给出了实用解决方案,帮助科研新手高效获取地表温度数据,适用于环境监测和城市热岛效应分析等领域。

weixin_29061425的博客 519

这才是真正让你入门 TypeScript 类型体操的文章,确实如此!

大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众号回复1,加入高级Node交流群通过本文你能学到什么?keyof 操作符的使用TypeScript 中的映射类型使用,以及映射类型结合as 关键字的使用extends 条件判断类型的基本使用infer 关键字的使用通过这些基础知识真实场景改造你现在的代码(用其中一篇文章 函数参数的例子来写)如果你觉得你 TypeScript 已...

程序员成长指北 720

国赛数学建模高教社杯历届优秀论文全集

包含了2004到2023年高教社的赛题及优秀论文。

BanDeng001的博客 3286

TypeScript泛型和类型体操

泛型和类型体操是 TypeScript 中强大的类型系统的关键组成部分。通过使用泛型,我们可以创建可重用、灵活和类型安全的代码。内置泛型函数提供了一些常用的类型转换工具,如PartialRequired和Pick,可以帮助我们更方便地处理类型操作。通过结合泛型、extends关键字、内置泛型函数和其他高级类型概念,我们能够在 TypeScript 中编写更复杂、类型安全的代码,并利用 TypeScript 的强大类型系统来提高代码的可读性、可维护性和可扩展性。

欢迎来到我的前端博客!这里汇集了关于前端开发的最新技术、实用工具和经验分享。我将为你提供详细的教程、代码示例和实战案例,帮助你掌握Web开发的核心概念和技能。不论你是初学者还是有经验的开发者,这个博客都适合你。 1241

arcgis密度分析

密度分析 密度分析是指根据输入的要素数据集计算整个区域的数据集状况,从而产生一个连续的密度表面。通过计算密度,将每个采样点的值散布到整个研究区域,并获得输出栅格中每个像元的密度值。在 ArcGIS 中,分布密度的计算方法有点密度分析、线密度分析和核密度分析三种。 1.点密度分析 导入实验数据居民点图层和道路图层 在自定义里勾选空间分析模块Spatial Analyst 点击空间分析工具中密度分析内的点密度分析, 参数设置如下,其中输出像元大小表示输出栅格数据集的像元大小。值越小.

Jasenjane的博客 2万+

【现代人形机器人:从物理建模到大模型驱动的控制与学习】第1章 机器人建模回顾

本章建立读者进行后续控制 / 优化 / 学习工作的数学与计算基础。内容分为三大块:刚体运动学:位姿表示、坐标变换、旋转参数与李代数/李群(指数映射、twist)多关节机构的正/逆运动学:DH 与 POE 两种建模、雅可比矩阵推导、数值/解析逆解方法与奇异性问题约束动力学:拉格朗日公式、牛顿—欧拉递归算法、接触/冲击模型、受约束系统的方程(拉格朗日乘子与互补性条件)每一节同时给出与练习题。假设读者已具备线性代数(矩阵、特征分解、SVD)、多变量微积分与基础力学(牛顿第二定律)知识。

u012133341的博客 185

TypeScript 类型体操:让类型系统成为你的超能力

类型体操是使用 TypeScript 类型系统实现复杂类型操作的技术,它通过泛型、条件类型、映射类型和模板字面量类型等特性,在编译时完成类型计算。就像在类型层面上编写程序一样,实现普通开发者难以想象的强大类型约束。​核心价值:​强化类型安全(编译时捕捉边缘情况)实现神奇的类型推导(自动推断复杂关系)创建自描述代码(类型即文档)TypeScript 类型系统的本质是一个图灵完备的子编程语言。编译时数据校验智能类型推导自适配的泛型结构。

2401_86373285的博客 713

2、OTA/gm - C滤波器的架构与设计

本文深入探讨了OTA/gm-C滤波器的两种主要设计方法:基于LC梯形网络的设计与多环反馈(MLF)结构。前者包括元件替代法和信号模拟法,分别通过电感替代或电路方程模拟实现低敏感度滤波器;后者通过积分器级联与反馈网络合成全极点或含任意传输零点的传递函数。文中详细分析了不同结构如IFLF和LF的反馈矩阵、传递函数及性能差异,指出LF结构在敏感度、噪声和整体性能上的优势。同时比较了各类方法的优缺点及适用场景,为高频连续时间集成电路滤波器的设计提供了系统性指导。

fanta的博客 137

TypeScript 类型体操

有点 Object.keys 那意思,用作获取 interface 和对象类型的 “键”

weixin_45368328的博客 633

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TypeScript 类型体操练习(一)

实现一个 IF 类型,它接收一个条件类型 C ,一个判断为真时的返回类型 T ,以及一个判断为假时的返回类型 F。在类型系统里实现 JavaScript 内置的 Array.concat 方法,这个类型接受两个参数,返回的新数组类型应该按照输入参数从左到右的顺序合并为一个新的数组。在类型系统里实现 JavaScript 的 Array.includes 方法,这个类型接受两个参数,返回的类型要么是 true 要么是 false。从联合类型 T 中排除 U 中的类型,来构造一个新的类型。

qq_45693419的博客 923

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

类型体操:探究 TypeScript 内置高级类型

所以真正逻辑是, “a” | “b” | “c” 被打散,变成依次判断 “a” 、“b”、“c” 是否为 “b” 的子类,分别得到 “a” 、never、“c”,然后联合起来,就变成了 “a” | “c”。

fe_watermelon的博客 746

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...

记录--TS类型写不好?一起来训练提升吧!

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前期准备 本篇文章的编写目的是为了提升TS类型的书写质量,高质量的类型可以提高项目的可维护性并避免一些潜在的漏洞; 在学习本篇之前需要有一定的TS基础知识,在此基础上可以更好的完成各种类型的挑战,编写出属于自己的类型工具; 这里推荐我之前梳理的基础知识点 一份够用的TS常用特性总结 或 TS中文文档 ; 目前只完成了easy类型和...

林恒的博客 454

【TypeScript类型体操实战指南:从入门到精通】

本文深入探讨TypeScript高级类型系统,通过实战案例帮助开发者掌握类型体操技巧。主要内容包括:1)基础类型系统如类型注解、联合/交叉类型;2)泛型编程与类型推断;3)条件类型与类型映射;4)常用工具类型解析(Partial、Pick等);5)高级类型体操实战(深度只读类型等)。文章通过大量代码示例对比错误与正确实践,强调类型安全的重要性,帮助开发者提升代码质量和开发效率。

想学后端的前端程序员的博客 663

TypeScript类型体操--为函数追加参数

前边几篇文章我们一共实现了**42**个工具类型,按照本专栏的规划,还差**57**个... 本节我们继续学习**一个**新的工具类型

sirsu_lick的博客 621

TypeScript类型体操学习路径

学习 TypeScript 的类型体操(Type Programming)需要系统性地掌握类型系统的核心概念,并通过大量练习将理论转化为实践能力。适度使用,保持代码的可读性。记住:类型体操的最终目标是。

2401_85392853的博客 976

TypeScript 学习笔记 — 模板字符串和类型体操(十五)

目录基本介绍字符串类型体操实操环节1. 字符串首字母大写 CapitalizeString2. 获取字符串第一个字符 FirstChar3. 获取字符串最后一个字符 LastChar4. 字符串转元组 StringToTuple5. 元组转字符串 TupleToString6. 重复字符串 RepeatString7. 字符串分割 SplitString8. 获取字符串长度 LengthOfSt...

Echoyya、的博客 1148

TypeScript入门-函数

▓▓▓▓▓▓ 大致介绍   TypeScript为JavaScript函数添加了额外的功能,让我们可以更容易地使用。TypeScript中的函数也包括JavaScript中最常见的两种函数 function add(x,y){ return x + y; } let add = function(x,y){ return x + y; } ▓▓▓▓...

weixin_30505485的博客 165

ts 类型体操:18 - 获取元组长度 #2601

【代码】ts 类型体操:18 - 获取元组长度#2601。

包磊磊的博客 578

TypeScript类型体操1.github easy 4-pick

TS类型体操challengs

weixin_43995121的博客 450
上一篇: 前端语音转文字实践总结
下一篇: tsconfig.json的esModuleInterop使用场景是怎样的?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

趁你还年轻233

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

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

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

打赏作者

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

抵扣说明:

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

余额充值