You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现支持大数的TypeScript Range类型?

实现支持大数范围的TypeScript Range类型

需求背景

需要实现一个TypeScript的Range类型,用于约束变量的数值范围,期望达成以下效果:

type Range<start, end, step extends number = 1> = ?

type a1 = Range<1000, 2000>; // 1000 | 1001 | 1002 | ... | 2000
type a2 = Range<1000, 2000, 2>; // 1000 | 1002 | ... | 2000

此前的实现仅能支持1000以内的数值范围,无法覆盖5000及以上的大数场景。

已实现的解决方案

通过社区帮助,已完成支持大数范围的Range类型实现,代码如下:

type _Range<
    S extends number,
    E extends number,
    Step extends number,
    Acc extends number[] = [],
    Current extends number = [...Acc, ...{ length: S }]['length']
> = Current extends E
    ? [...Acc, Current][number]
    : Current extends infer C extends number
    ? _Range<S, E, Step, [...Acc, C], [...{ length: C }, ...{ length: Step }]['length']>
    : never;

type Range<
    S extends number,
    E extends number,
    Step extends number = 1
> = S extends E ? S : _Range<S, E, Step>;

该实现可支持数万级的数值范围,但当范围过大时会存在类型计算性能问题,超万级范围的性能优化目前尚未完成。

内容的提问来源于stack exchange,提问作者Autumn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:55:24