0
点赞
收藏
分享

微信扫一扫

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



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


知识运用:

  1. 涉及到模板字符类型。
  2. 涉及到infer关键字使用。
  3. 涉及到类型编程中递归使用。

题目分析:

题目地址:108-medium-trim

实现​​Trim<T>​​,它是一个字符串类型,并返回一个新字符串,其中两端的空白符都已被删除。

例如

type trimed = Trim<'  Hello World  '> // expected to be 'Hello World'

题目解答:

测试用例:

  1. 通过我们设计的类型工具将输入的类型处理为预期的类型。
  2. 分别需要处理空白字符、换行符、制表符三种。

/* _____________ 测试用例 _____________ */
import type { Equal, Expect } from '@type-challenges/utils'

type cases = [
Expect<Equal<Trim<'str'>, 'str'>>,
Expect<Equal<Trim<' str'>, 'str'>>,
Expect<Equal<Trim<' str'>, 'str'>>,
Expect<Equal<Trim<'str '>, 'str'>>,
Expect<Equal<Trim<' str '>, 'str'>>,
Expect<Equal<Trim<' \n\t foo bar \t'>, 'foo bar'>>,
Expect<Equal<Trim<''>, ''>>,
Expect<Equal<Trim<' \n\t '>, ''>>,
]

答案及解析:

这道题的应用是前两道提的合集,分别递归处理前面的空白字符和递归处理后面的空白字符类型。

  1. 老套路,使用泛型来约束输入类型为String类型。
  2. 使用TrimLeft类型工具来处理输入类型中左侧出现的空白字符、换行符、制表符。
  3. 使用TrimRight类型工具来处理输入类型中右侧出现的空白字符、换行符、制表符。
  4. 可以先处理右侧再处理左侧,不做限制。

/* _____________ 答案 _____________ */

type TrimLeft<S extends string> = S extends `${" " | "\n" | "\t"}${infer Rest}`
? TrimLeft<Rest>
: S;
type TrimRight<S extends string> = S extends `${infer Rest}${" " | "\n" | "\t"}`
? TrimRight<Rest>
: S;
type Trim<S extends string> = TrimLeft<TrimRight<S>>;

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

举报

相关推荐

0 条评论