最近在看 TypeScript 相关的内容,做了一下类型体操,真的太秀啦
递归、infer 满天飞,今天就来领略一下 TS 能做什么骚操作吧!
先放上本文的几个小标题,很骚
下面开始军训体操
这一题是 TS 类型挑战中的 Greater Than
这道题需要我们实现 GreaterThan 判断 T > U 是 true 还是 false
有几个特殊测试用例
GreaterThan<2, 1> //should be true
GreaterThan<1, 1> //should be false
GreaterThan<10, 100> //should be false
GreaterThan<111, 11> //should be true
看到这题,在 JS 中非常的简单,直接就能有答案,但是 TS 是没有计算能力的,也不支持大小判断
那么我们还能怎么做呢?巧用数组,通过数组的 length 来进行比较,
有两种可行的方法
T 和 U 的数组,通过数组判断哪个数组更长这里我们先看第一种方法
可以采用递归来实现,前面我们也有说过了,数组的很容易爆掉,但是测试用例还算温柔,这题能过
T,U 进行对比,哪个先追上新数组的长度,哪个就小看到具体实现上
通过引入新的变量 R extends any[] = [] ,来进行辅助的计算,接着依次判断 T,U 和 R['length] 是否相等,这时候,如果 T 和 R['length] 相等了而 U 还没有相等,那就说明了 T < U ,如果都不相等,那就继续加大数组 R 的长度
怎么加大数组