Это пост с доказательством концепции, лично я не нахожу в этом никакого применения, пока
Рекурсия машинописного текста останавливается на 49-м или 999-м цикле
type CreateArrayWithLengthX< LENGTH extends number, ACC extends unknown[] = [], > = ACC['length'] extends LENGTH ? ACC : CreateArrayWithLengthX<LENGTH, [...ACC, 1]> type A = CreateArrayWithLengthX<999>['length'] // 999 type B = CreateArrayWithLengthX<1000>['length'] // any
"детская площадка"
Это нехорошо, если вы хотите динамически генерировать тип массива с длиной более 999
решение состоит в том, чтобы добавить еще одно измерение в цикл более 999 раз.
type CreateArrayWithLengthX< LENGTH extends number, ACC extends unknown[] = [], > = ACC['length'] extends LENGTH ? ACC : CreateArrayWithLengthX<LENGTH, [...ACC, 1]> type Exceed999< ARR extends 1[], > = [...ARR['length'] extends 0 ? []: [...CreateArrayWithLengthX<999>,...Exceed999<ARR extends [...infer S extends 1[], infer P] ? S : never>]] type V = Exceed999<CreateArrayWithLengthX<10>>['length'] // 10x999 = 9990
"детская площадка"
теперь вы можете динамически создавать тип массива с длиной больше 999
однако имейте в виду, что максимальная длина типа массива составляет 10 000
Можно создать массив любой длины меньше 10 000, а не только множитель 999, но это потребует много работы, и я хочу, чтобы здесь все было просто.