Typescript类型题材 - NumberRange

题目

中文

有时我们需要限制数字的范围...

示例:

type result = NumberRange<2 , 9> //  | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 

English

Sometimes we want to limit the range of numbers...
For examples.

type result = NumberRange<2 , 9> //  | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 

答案

type NumberRange<
  L extends number,
  H extends number,
  CArr extends any[] = [],
  OArr extends unknown[] = [unknown],
  R extends number = H
> = H extends CArr['length']
  ? R
  : L extends CArr['length']
  ? NumberRange<OArr['length'], H, [any, ...CArr], [unknown, ...OArr], L | R>
  : NumberRange<L, H, [...CArr, any], [unknown, ...OArr]>;

在线演示

知识点

  • 使用元组的 length 进行计数
  • 将结果保存到泛型参数 R 内, 避免递归层数过多导致 H 超过 50 tsc报 possible infinity loop

参考资料

posted @   Laggage  阅读(146)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示