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

TypeScript 中实现 TrimLeft、TrimRight 等字符串操作类型

TypeScript 中实现 TrimLeft、TrimRight 等字符串操作类型

在 TypeScript 开发过程中,我们常常需要对字符串进行各种操作以满足不同的业务需求。其中,去除字符串两端的空白字符是较为常见的操作之一。虽然 JavaScript 原生提供了trim()方法可以同时去除字符串两端的空白字符,但在某些场景下,我们可能只需要去除字符串左侧或右侧的空白字符。接下来,我们将介绍如何在 TypeScript 中实现类似TrimLeftTrimRight这样的字符串操作类型。

去除字符串左侧空白字符(TrimLeft)

实现思路

要实现去除字符串左侧空白字符的功能,我们可以借助 TypeScript 的条件类型和递归类型。条件类型允许我们根据一定的条件来选择不同的类型,而递归类型则可以帮助我们逐步处理字符串中的字符。

代码实现

typeWhiteSpace=' '|'\n'|'\t'|'\r';typeTrimLeft<Sextendsstring>=Sextends`${inferFirst}${inferRest}`?FirstextendsWhiteSpace?TrimLeft<Rest>:S:S;

代码解释

  1. 首先,我们定义了一个WhiteSpace类型,它包含了常见的空白字符,如空格、换行符、制表符和回车符。
  2. 然后,我们定义了TrimLeft类型。它使用了条件类型,通过extends关键字来判断字符串S是否可以拆分为一个字符First和剩余部分Rest
  3. 如果First是空白字符(即First extends WhiteSpacetrue),则递归调用TrimLeft处理剩余部分Rest
  4. 如果First不是空白字符,则直接返回原始字符串S,因为此时已经找到了非空白字符,左侧的空白字符已经被去除。

使用示例

typeExample1=TrimLeft<' hello'>;// 'hello'typeExample2=TrimLeft<'\n\t world'>;// 'world'

去除字符串右侧空白字符(TrimRight)

实现思路

去除字符串右侧空白字符的实现思路与去除左侧空白字符类似,但由于 TypeScript 的类型系统是从左到右进行处理的,我们需要采用一些技巧来实现从右向左的处理。一种常见的方法是将字符串反转,然后去除左侧的空白字符,最后再将结果反转回来。

代码实现

typeReverse<Sextendsstring>=Sextends`${inferFirst}${inferRest}`?`${Reverse<Rest>}${First}`:'';typeTrimRight<Sextendsstring>=Reverse<TrimLeft<Reverse<S>>>;

代码解释

  1. 首先,我们定义了Reverse类型,它用于反转字符串。通过递归地将字符串拆分为第一个字符和剩余部分,然后将剩余部分反转后与第一个字符拼接,实现字符串的反转。
  2. 然后,我们定义了TrimRight类型。它先使用Reverse将原始字符串反转,再使用TrimLeft去除反转后字符串左侧的空白字符(即原始字符串右侧的空白字符),最后再使用Reverse将结果反转回来,得到去除右侧空白字符后的字符串。

使用示例

typeExample3=TrimRight<'hello '>;// 'hello'typeExample4=TrimRight<'world\n\t '>;// 'world'

同时去除字符串两侧空白字符(Trim)

实现思路

既然我们已经实现了TrimLeftTrimRight,那么同时去除字符串两侧空白字符的Trim类型就可以通过组合这两个类型来实现。

代码实现

typeTrim<Sextendsstring>=TrimLeft<TrimRight<S>>;

代码解释

Trim类型先使用TrimRight去除字符串右侧的空白字符,再使用TrimLeft去除结果字符串左侧的空白字符,从而实现了同时去除字符串两侧空白字符的功能。

使用示例

typeExample5=Trim<' hello world '>;// 'hello world'typeExample6=Trim<'\n\t test\n\t '>;// 'test'

总结

通过上述代码实现,我们在 TypeScript 中定义了TrimLeftTrimRightTrim这三个字符串操作类型。这些类型利用了 TypeScript 的条件类型和递归类型,能够在编译时对字符串进行操作,去除字符串左侧、右侧或两侧的空白字符。这种类型级别的操作可以提高代码的类型安全性,减少运行时错误,并且在一些对类型要求严格的场景下非常有用。

http://www.zskr.cn/news/1449065.html

相关文章:

  • SAM在医疗图像上总翻车?看SurgicalSAM如何用‘原型学习’巧妙解决领域鸿沟
  • LightGBM原理介绍
  • ESP8266串口通信与MicroPython开发实战指南
  • AI办公神器!用AI提升10倍效率,职场人必备!
  • 一图理清对称加密 AEAD 为什么最怕 nonce 用错
  • 3.3 Linux权限操作
  • 揭秘消息防撤回:如何永久保存微信QQ的消失对话
  • 去欧洲机票别再自己刷OTA了!武汉圣擎航空——您身边最靠谱的法国及全欧航线特价公务舱/头等舱专家(附全航线解析+售后保障) - 土星买买买
  • 手把手教你学Simulink——双向 DC‑DC 变换器在恒压(CV)与恒流(CC)模式下的切换仿真
  • 肺部靶向 AAV 怎么选?如何解决靶向不精准、转导效率低的递送难题?
  • 2026 HENGSHI BOX 全域智控舱技术白皮书:衡石科技软硬一体的私有化 Agentic BI 架构
  • 【Agent 学习日记】我们来说说 Agent 记忆压缩通常有哪些方法?
  • 2026 短视频去水印软件推荐,抖音快手视频号通用 - 时时资讯
  • 国内飞往澳大利亚全航线汇总|特价经济 / 特惠公务 / 折扣商务头等舱申请|靠谱国际机票代理人优选:武汉圣擎航空(15120088536 微信同号) - 土星买买买
  • 从零打造2000W正弦波逆变器:PIC单片机控制与全桥功率设计实战
  • 从干涉仪到人眼像差:一文读懂Zernike多项式在不同光学场景下的“变脸”艺术
  • Unlock-Music终极指南:3分钟解锁所有加密音乐文件的完整教程
  • 北京五恒系统厂家推荐:北京五恒系统怎么选?厂家、品牌、口碑、价格一篇看懂 - GrowthUME
  • C++:红黑树实现
  • 从博弈论到你的Jupyter Notebook:手把手拆解SHAP值计算原理与实战调优
  • 洛雪音乐音源完全指南:5分钟打造你的专属高品质音乐库
  • 记录一次ardupilot_sitl调试longitude的输入数据流
  • Android: 事件分发
  • 2026西安黄金回收门店深度测评,大克重金条变现能力TOP10权威盘点名录 - 西安闲转记
  • 智能图像矢量化:3步将PNG/JPG转换为可无限缩放的SVG矢量图
  • 项目管理中的铁三角:时间、成本与质量如何达到平衡?
  • Video2X 6.0.0:免费AI视频修复神器,让模糊视频秒变4K高清
  • WarcraftHelper终极指南:5个简单步骤让魔兽争霸3在现代电脑上流畅运行
  • RAG 技术全解析:让大模型学会“开卷考试“
  • 微信消息批量发送终极指南:5分钟掌握WeChat-mass-msg自动化神器