typescript - 有没有一种合理的方法可以在打字稿中输入“小于 n 的非负整数”?
问题描述
我非常喜欢Typescript,但仍然只是学习,我并不真正关心应用程序,我只是想知道什么可以打字,什么不能打字。
我想输入的一件事是 0 到 1 之间的(实数)数字,但我认为这可能要求太多,所以我只关注 0 到 n 之间的整数。
我想出了这个
type ExtendArray<E, T extends any[]> = ((fst: E, ...rest: T) => any) extends (
...rest: infer U
) => any
? U
: T;
type UpTo<N extends number, K extends number[] = []> = {
0: UpTo<N, ExtendArray<K["length"], K>>;
1: K;
}[K["length"] extends N ? 1 : 0];
type UnwrapArray<Arr extends any[]> = Arr extends Array<infer R> ? R : never;
type NUMS = UnwrapArray<UpTo<10>>;
超级,类型NUMS是0 | 1 | ... | 9 这就是我想要的。
但是,如果我用 100 替换 10,我会遇到一个问题“类型实例化太深并且可能是无限的”,公平地说,我的实现相当复杂。
我的问题不是关于错误,我认为这是合理的,而是有没有一种好方法可以输入我想要的内容而不会遇到这个限制?
一个好方法应该让我把数字提高到 20000
作为一种旁注,我发现自己做了很多这样的诡计,我使用函数类型只是为了表达我想要做的事情(如在 ExtendArray 中),这是否合法(即它是人们通常做事的方式吗?)
解决方案
推荐阅读
- python - Spark将文件中的键值对读入Dataframe
- java - 如何用约会日期填充组合框?
- python - 分享:我在 python 3 中做了一些计时器!这里是:
- javascript - 如何让 javascript 和 python 在电话应用程序中一起通信?
- python - Python pandas 将 mongodb 集合乱序导出到 CSV 列
- visual-studio-code - 是否可以使用特定文件在启动时更改 vscode 状态栏颜色?
- json - 如何在不调用 api 的情况下检索记录列表
- react-native - 未设置导航标题
- sql - 用于验证日期范围的 SQL 索引
- c# - 如何更新只有外键的表