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

能否无需逐一声明生成按指定比例递增的数值联合类型?

如何生成指定步长的数值联合类型?

当然可以通过TypeScript工具类型实现,无需手动枚举所有数值。下面是一个递归实现的工具类型,支持传入最小值、最大值和递增步长:

工具类型实现

// 辅助类型:通过元组长度模拟数值加法
type Add<A extends number, B extends number> =
  [...Array<A>, ...Array<B>]['length'];

// 核心工具类型:生成从Min到Max、步长为Step的数值联合类型
type ScaleBy<Min extends number, Max extends number, Step extends number, Current extends number = Min> =
  Current extends Max 
    ? Current 
    : Current extends number 
      ? Current | ScaleBy<Min, Max, Step, Add<Current, Step>> 
      : never;

使用示例

比如你需要生成从8到400、步长为8的数值联合类型,直接调用即可:

type ScaleByEight = ScaleBy<8, 400, 8>;
// 最终等价于 8 | 16 | 24 | ... | 400

关键说明

  • 参数要求:Min、Max、Step必须是字面量数值类型(比如8而不是number),否则TypeScript无法进行类型层面的数值计算。
  • 递归限制:TypeScript类型系统有递归深度上限(默认约1000),如果生成的数值条目过多(比如步长1、范围1-1000+),会触发类型错误,这种场景建议手动拆分或调整范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:31:44