能否无需逐一声明生成按指定比例递增的数值联合类型?
如何生成指定步长的数值联合类型?
当然可以通过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
相关产品推荐
相关产品推荐

