【类型挑战】Trim,难度⭐️⭐️
2023-02-18 16:41:23 时间
Dear,大家好,我是“前端小鑫同学”,?长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~
知识运用:
- 涉及到模板字符类型。
- 涉及到infer关键字使用。
- 涉及到类型编程中递归使用。
题目分析:
题目地址:108-medium-trim
实现Trim<T>
,它是一个字符串类型,并返回一个新字符串,其中两端的空白符都已被删除。
例如
type trimed = Trim<' Hello World '> // expected to be 'Hello World'
题目解答:
测试用例:
- 通过我们设计的类型工具将输入的类型处理为预期的类型。
- 分别需要处理空白字符、换行符、制表符三种。
/* _____________ 测试用例 _____________ */
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 '>, ''>>,
]
复制代码
答案及解析:
这道题的应用是前两道提的合集,分别递归处理前面的空白字符和递归处理后面的空白字符类型。
- 老套路,使用泛型来约束输入类型为String类型。
- 使用TrimLeft类型工具来处理输入类型中左侧出现的空白字符、换行符、制表符。
- 使用TrimRight类型工具来处理输入类型中右侧出现的空白字符、换行符、制表符。
- 可以先处理右侧再处理左侧,不做限制。
/* _____________ 答案 _____________ */
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>>;
接下来的一题是:【类型挑战】String to Union,难度⭐️⭐️
相关文章
- HaProxy 负载均衡集群
- 快速部署Apache服务静态网站
- LAMP
- Varnish 实现Web站点加速
- 使用MSF生成各种Payload
- Metasploit 服务扫描与爆破
- Java开发主流框架有哪些?
- Nmap 常用基础命令详解
- Ettercap 实施中间人攻击 [实战篇]
- KVM 虚拟机配置笔记
- FPS游戏:方框绘制算法分析
- CE修改器使用教程 [入门篇]
- Zabbix 系统概述与部署
- Zabbix-自带监控项与Kye
- Docker 镜像与容器管理
- Docker 数据卷与容器互联
- Docker 添加容器SSH服务
- 大屏消费借世界杯东风起飞,这个品牌为何总能抓住机会?
- DockerFile 编译语法详解
- (四)汇编语言——简单程序