【类型挑战】Trim Right,难度⭐️⭐️

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第24天,点击查看活动详情

Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~


知识运用:

  1. 涉及到模板字符类型。
  2. 涉及到infer关键字使用。

题目分析:

题目地址:4803 - Trim Right

实现 TrimRight<T> ,它接收确定的字符串类型并返回一个新的字符串,其中新返回的字符串删除了原字符串结尾的空白字符串。

例如

type Trimed = TrimLeft<' Hello World '> // 应推导出 ' Hello World'

题目解答:

测试用例:

  1. 通过我们设计的类型工具将输入的类型处理为预期的类型。
  2. 分别需要处理空白字符、换行符、制表符三种。
/* _____________ 测试用例 _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<TrimRight<'str'>, 'str'>>,
Expect<Equal<TrimRight<'str '>, 'str'>>,
Expect<Equal<TrimRight<'str '>, 'str'>>,
Expect<Equal<TrimRight<' str '>, ' str'>>,
Expect<Equal<TrimRight<' foo bar \n\t '>, ' foo bar'>>,
Expect<Equal<TrimRight<''>, ''>>,
Expect<Equal<TrimRight<'\n\t '>, ''>>,
]

答案及解析:

我相信看过上一题的处理的伙伴已经知道这道题怎么做了,我们还是再来过一遍做题思路。

  1. 老套路,使用泛型来约定输入类型为String。
  2. 使用条件类型来判断S是否可以分配给包含测试用例提到的三种类型在模板字符串右边的类型。
  3. 如果依旧可分配还是使用TrimRight进行递归处理,指到无法分配后返回类型S,及完成了TrimRight的功能。
type TrimRight<S extends string> = S extends `${infer Rest}${" " | "\n" | "\t"}`
? TrimRight<Rest>
: S;

推荐阅读:

  1. 扒官方文档学Ts类型编程

接下来的一题是:【类型挑战】Trim,难度⭐️⭐️


欢迎关注我的公众号“前端小鑫同学”,原创技术文章第一时间推送。

posted @   前端小鑫同学  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示