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

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

知识运用:


  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;



相关文章
|
2月前
|
算法 C语言
【再识C进阶3(上)】详细地认识字符串函数、进行模拟字符串函数以及拓展内容
【再识C进阶3(上)】详细地认识字符串函数、进行模拟字符串函数以及拓展内容
|
算法 测试技术
算法强化每日一题--倒置字符串
算法强化每日一题--倒置字符串
|
测试技术 索引
【类型挑战】最后一个元素,难度⭐️⭐️
【类型挑战】最后一个元素,难度⭐️⭐️
108 0
【类型挑战】最后一个元素,难度⭐️⭐️
|
测试技术 索引
【类型挑战】实现 Omit,难度⭐️⭐️
【类型挑战】实现 Omit,难度⭐️⭐️
224 0
【类型挑战】实现 Omit,难度⭐️⭐️
|
测试技术
【类型挑战】Readonly 2,难度⭐️⭐️
【类型挑战】Readonly 2,难度⭐️⭐️
137 0
【类型挑战】Readonly 2,难度⭐️⭐️
|
JavaScript 前端开发 测试技术
【类型挑战】Concat,难度⭐️
【类型挑战】Concat,难度⭐️
130 0
【类型挑战】Concat,难度⭐️
|
测试技术
【类型挑战】深度 Readonly,难度⭐️⭐️
【类型挑战】深度 Readonly,难度⭐️⭐️
295 0
【类型挑战】深度 Readonly,难度⭐️⭐️
|
测试技术
【类型挑战】获取函数返回类型,难度⭐️⭐️
【类型挑战】获取函数返回类型,难度⭐️⭐️
133 0
【类型挑战】获取函数返回类型,难度⭐️⭐️
|
测试技术
【类型挑战】Unshift,难度⭐️
【类型挑战】Unshift,难度⭐️
107 0
【类型挑战】Unshift,难度⭐️
|
测试技术 索引
【类型挑战】获取元祖长度,难度⭐️
【类型挑战】获取元祖长度,难度⭐️
194 0
【类型挑战】获取元祖长度,难度⭐️