4425 - Greater Than
实现一个类型 GreaterThan<T, U>
判断 T
是否大于 U
, 不需要考虑负数
例如:
GreaterThan<2, 1> //should be true
GreaterThan<1, 1> //should be false
GreaterThan<10, 100> //should be false
GreaterThan<111, 11> //should be true
Solution
type GreaterThan<
T extends number,
U extends number,
C extends 0[] = []
> = C['length'] extends T
? false
: C['length'] extends U
? true
: GreaterThan<T, U, [...C, 0]>
由于 ts
中无法进行数学运算, 故涉及到数学运算的内容,通常需要将数字转换成对应长度的数组, 再通过数组的 length
属性和 extends
关键字来进行运算
在 GreaterThan
类型定义中也遵循了这样的方式。通过接收泛型 C
的长度来表示当前循环的次数, 并分别与 T
和 U
比较,以此来找到 T
和 U
中较小的那个数
如果 C['length'] extends T
结果为 true
, 则表示 T
是较小的那个数, 直接返回 false
如果 C['length'] extends U
结果为 true
, 则表示 U
是较小的那个数, 直接返回 true
如果这轮没有找到较小的那个数, 则把 C
添加一个元素, 表示循环次数加1, 之后再继续递归, 直到找到较小的那个数
由于数组的最大长度受限, 故无法满足大数的比较