【类型挑战】Trim Left,难度⭐️⭐️
2023-02-18 16:41:23 时间
Dear,大家好,我是“前端小鑫同学”,?长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~
知识运用:
- 涉及到模板字符类型。
- 涉及到infer关键字使用。
题目分析:
题目地址:106-medium-trimleft
实现 TrimLeft<T>
,它接收确定的字符串类型并返回一个新的字符串,其中新返回的字符串删除了原字符串开头的空白字符串。
例如
type trimed = TrimLeft<' Hello World '> // 应推导出 'Hello World '
题目解答:
测试用例:
- 通过我们设计的类型工具将输入的类型处理为预期的类型。
- 分别需要处理空白字符、换行符、制表符三种。
/* _____________ 测试用例 _____________ */
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'>, ''>>,
]
复制代码
答案及解析:
- 通过观察测试用例我们得到需要Trim的内容包括空白字符、换行符、制表符。
- 通过条件类型来判断S是否可分配给包含上述三种内容的模板字符类型中来判断。
- 如果依旧可分配的话依旧使用TrimLeft递归去除来得到无法分配给上述三种内容的S。
- 在输入类型上我们依旧使用泛型约束输入类型为String。
/* _____________ 答案 _____________ */
type TrimLeft<S extends string> = S extends `${" " | "\n" | "\t"}${infer Rest}`
? TrimLeft<Rest>
: S;
接下来的一题是:【类型挑战】Trim Right,难度⭐️⭐️
相关文章
- 漫谈:四大运营商“两两合并”的可能与必然
- material Tree组件父节点联动改造
- 解放双手!根据代码自动生成时序图,这款IDEA插件真香!
- Centos 7 安装 OpenJDK 11 yum 方式
- 看了我常用的IDEA插件,同事也开始悄悄安装了...
- 保命小诀窍:IDEA远程Debug技巧,你了解吗?
- 我上线了一个炫酷的项目实战教程网站,可能有的小伙伴还不知道...
- 如何设计一个安全的对外接口,老司机总结了这几点
- 告别if else!试试这款轻量级流程引擎吧,自带IDEA插件真香!
- win10更新后低分辨率显卡驱动丢失,NVIDIA图形驱动程序安装失败终极解决方法
- 横空出世!MyBatis-Plus同款ES ORM框架,用起来够优雅!
- 别再用main方法测试了,太Low!这才是专业的SpringBoot项目测试方法!
- MyBatis这样用,同事直呼哇塞,堪称最佳实践!
- 几分钟上线一个项目文档网站,这款开源神器实在太香了!
- 牛逼!Markdown还能这么玩?这款开源神器绝了!
- 还在用HttpUtil?SpringBoot 3.0全新HTTP客户端工具来了,用起来够优雅!
- 船新 IDEA 2022.3 正式发布,新特性真香!
- 5分钟将ChatGPT搬进Lighthouse
- Chaos 测试下的若干 NebulaGraph Raft 问题分析
- 如何使用Arthas抓包确认RocketMQ发送消息耗时慢