From 1e5ee8aaa4c1ecd4d835dfe7f17b607aee5c81ac Mon Sep 17 00:00:00 2001 From: Moritz Vetter <16950410+Isokaeder@users.noreply.github.com> Date: Mon, 3 Apr 2023 06:46:47 +0200 Subject: [PATCH] refact: use recursive type to express number range --- source/types.ts | 288 ++---------------------------------------------- 1 file changed, 11 insertions(+), 277 deletions(-) diff --git a/source/types.ts b/source/types.ts index ae6688c..04b2979 100644 --- a/source/types.ts +++ b/source/types.ts @@ -1,283 +1,17 @@ +type UnionRange< + N extends number, + Result extends Array = [], +> = +(Result['length'] extends N + ? Result[number] + : UnionRange +) + export type Bit = 0 | 1 export type Bits = Array export type BooleanBits = Array export type Byte = [Bit, Bit, Bit, Bit, Bit, Bit, Bit, Bit] export type Nibble = [Bit, Bit, Bit, Bit] -// @TODO: Find a better solution -export type UInt4 = - | 0 - | 1 - | 2 - | 3 - | 4 - | 5 - | 6 - | 7 - | 8 - | 9 - | 10 - | 11 - | 12 - | 13 - | 14 - | 15 - -// @TODO: Find a better solution -export type UInt8 = - | 0 - | 1 - | 2 - | 3 - | 4 - | 5 - | 6 - | 7 - | 8 - | 9 - | 10 - | 11 - | 12 - | 13 - | 14 - | 15 - | 16 - | 17 - | 18 - | 19 - | 20 - | 21 - | 22 - | 23 - | 24 - | 25 - | 26 - | 27 - | 28 - | 29 - | 30 - | 31 - | 32 - | 33 - | 34 - | 35 - | 36 - | 37 - | 38 - | 39 - | 40 - | 41 - | 42 - | 43 - | 44 - | 45 - | 46 - | 47 - | 48 - | 49 - | 50 - | 51 - | 52 - | 53 - | 54 - | 55 - | 56 - | 57 - | 58 - | 59 - | 60 - | 61 - | 62 - | 63 - | 64 - | 65 - | 66 - | 67 - | 68 - | 69 - | 70 - | 71 - | 72 - | 73 - | 74 - | 75 - | 76 - | 77 - | 78 - | 79 - | 80 - | 81 - | 82 - | 83 - | 84 - | 85 - | 86 - | 87 - | 88 - | 89 - | 90 - | 91 - | 92 - | 93 - | 94 - | 95 - | 96 - | 97 - | 98 - | 99 - | 100 - | 101 - | 102 - | 103 - | 104 - | 105 - | 106 - | 107 - | 108 - | 109 - | 110 - | 111 - | 112 - | 113 - | 114 - | 115 - | 116 - | 117 - | 118 - | 119 - | 120 - | 121 - | 122 - | 123 - | 124 - | 125 - | 126 - | 127 - | 128 - | 129 - | 130 - | 131 - | 132 - | 133 - | 134 - | 135 - | 136 - | 137 - | 138 - | 139 - | 140 - | 141 - | 142 - | 143 - | 144 - | 145 - | 146 - | 147 - | 148 - | 149 - | 150 - | 151 - | 152 - | 153 - | 154 - | 155 - | 156 - | 157 - | 158 - | 159 - | 160 - | 161 - | 162 - | 163 - | 164 - | 165 - | 166 - | 167 - | 168 - | 169 - | 170 - | 171 - | 172 - | 173 - | 174 - | 175 - | 176 - | 177 - | 178 - | 179 - | 180 - | 181 - | 182 - | 183 - | 184 - | 185 - | 186 - | 187 - | 188 - | 189 - | 190 - | 191 - | 192 - | 193 - | 194 - | 195 - | 196 - | 197 - | 198 - | 199 - | 200 - | 201 - | 202 - | 203 - | 204 - | 205 - | 206 - | 207 - | 208 - | 209 - | 210 - | 211 - | 212 - | 213 - | 214 - | 215 - | 216 - | 217 - | 218 - | 219 - | 220 - | 221 - | 222 - | 223 - | 224 - | 225 - | 226 - | 227 - | 228 - | 229 - | 230 - | 231 - | 232 - | 233 - | 234 - | 235 - | 236 - | 237 - | 238 - | 239 - | 240 - | 241 - | 242 - | 243 - | 244 - | 245 - | 246 - | 247 - | 248 - | 249 - | 250 - | 251 - | 252 - | 253 - | 254 - | 255 +export type UInt4 = UnionRange<16> +export type UInt8 = UnionRange<256>