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

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

知识运用:


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


题目分析:


题目地址:106-medium-trimleft

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

例如

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


题目解答:


测试用例:

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


答案及解析:

  1. 通过观察测试用例我们得到需要Trim的内容包括空白字符、换行符、制表符。
  2. 通过条件类型来判断S是否可分配给包含上述三种内容的模板字符类型中来判断。
  3. 如果依旧可分配的话依旧使用TrimLeft递归去除来得到无法分配给上述三种内容的S。
  4. 在输入类型上我们依旧使用泛型约束输入类型为String。
/* _____________ 答案 _____________ */
type TrimLeft<S extends string> = S extends `${" " | "\n" | "\t"}${infer Rest}`
  ? TrimLeft<Rest>
  : S;



相关文章
|
算法 Java API
【算法】字符串转int类型思路及代码
【算法】字符串转int类型思路及代码
189 0
|
存储 C++
【C++要笑着学】深浅拷贝 | string 模拟实现 | 传统写法与现代写法(二)
本章将正式介绍深浅拷贝,在模拟实现 string 的同时带着去理解深浅拷贝。我们模拟实现 string类不是为了造更好的轮子,而是为了去学习它,理解它的本质!你自己造一次,心里会更清楚,也有利于加深对 string 的理解。
185 0
【C++要笑着学】深浅拷贝 | string 模拟实现 | 传统写法与现代写法(二)
|
算法 C++ 容器
【STL终极奥义❀解耦合思想的实现❀】函数对象、谓词与函数适配器——从for_each、transform、count_if、sort算法源码的角度分析(二)
【STL终极奥义❀解耦合思想的实现❀】函数对象、谓词与函数适配器——从for_each、transform、count_if、sort算法源码的角度分析
151 0
【STL终极奥义❀解耦合思想的实现❀】函数对象、谓词与函数适配器——从for_each、transform、count_if、sort算法源码的角度分析(二)
|
测试技术 C语言 C++
【C++要笑着学】深浅拷贝 | string 模拟实现 | 传统写法与现代写法(一)
本章将正式介绍深浅拷贝,在模拟实现 string 的同时带着去理解深浅拷贝。我们模拟实现 string类不是为了造更好的轮子,而是为了去学习它,理解它的本质!你自己造一次,心里会更清楚,也有利于加深对 string 的理解。
103 0
【C++要笑着学】深浅拷贝 | string 模拟实现 | 传统写法与现代写法(一)
【C++要笑着学】深浅拷贝 | string 模拟实现 | 传统写法与现代写法(三)
本章将正式介绍深浅拷贝,在模拟实现 string 的同时带着去理解深浅拷贝。我们模拟实现 string类不是为了造更好的轮子,而是为了去学习它,理解它的本质!你自己造一次,心里会更清楚,也有利于加深对 string 的理解。
94 0
|
测试技术 索引
【类型挑战】最后一个元素,难度⭐️⭐️
【类型挑战】最后一个元素,难度⭐️⭐️
131 0
【类型挑战】最后一个元素,难度⭐️⭐️
|
JavaScript 前端开发 测试技术
【类型挑战】Concat,难度⭐️
【类型挑战】Concat,难度⭐️
157 0
【类型挑战】Concat,难度⭐️
|
测试技术
【类型挑战】Unshift,难度⭐️
【类型挑战】Unshift,难度⭐️
126 0
【类型挑战】Unshift,难度⭐️
|
测试技术 索引
【类型挑战】获取元祖长度,难度⭐️
【类型挑战】获取元祖长度,难度⭐️
223 0
【类型挑战】获取元祖长度,难度⭐️
|
JavaScript 前端开发 测试技术
【类型挑战】出栈,难度⭐️⭐️
【类型挑战】出栈,难度⭐️⭐️
158 0
【类型挑战】出栈,难度⭐️⭐️