Типскрипт числового диапазона

Итак, вам нужен числовой тип диапазона, например, от 30-40

обычно это делается следующим образом

type Thirty_to_Forty  = 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37| 38 | 39 |40
Войдите в полноэкранный режим Выйти из полноэкранного режима

Это выполнимо, но неинтересно.

Что если вам нужно мета-решение, от любого диапазона к любому диапазону, возможно ли это вообще?

Возможно, вот как вы это сделаете

type CreateArrayWithLengthX<
    LENGTH extends number,
    ACC extends unknown[] = [],
> = ACC['length'] extends LENGTH
    ? ACC
    : CreateArrayWithLengthX<LENGTH, [...ACC,1]>

type NumericRange<
   START_ARR extends number[], 
   END extends number, 
   ACC extends number=never>
=START_ARR['length'] extends END 
   ? ACC | END
   : NumericRange<[...START_ARR,1], END, ACC | START_ARR['length']>

type TWENTY_TO_FORTY = NumericRange<CreateArrayWithLengthX<20>,40>
Войдите в полноэкранный режим Выйти из полноэкранного режима

Playground

имейте в виду, что существует предел того, насколько глубоко Typescript может перебирать, и это число равно 1000.

Typescript будет жаловаться, если ваше начальное число равно 1000 или размер диапазона равен 1000.

Оцените статью
Procodings.ru
Добавить комментарий