Я бы просто запрограммировал это так:
type Increment<N extends number> = [
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, // as far as you need
...number[] // bail out with number
][N]
type Zero = 0
type One = Increment<Zero> // 1
type Two = Increment<One> // 2
type WhoKnows = Increment<12345>; // number
Как я уже говорил в других комментариях, в настоящее время нет большой поддержки для этого вида естественно рекурсивного типа. Мне бы понравилось бы , если бы оно было поддержано, но его там нет. На практике я обнаружил, что если что-то может обрабатывать кортежи длиной до 20 или около того, этого достаточно, но ваш опыт может отличаться.
Во всяком случае, если кто-нибудь придет сюда с решением, которое не жестко закодировано, но также работает и хорошо работает для произвольных чисел (где Increment<123456789>
будет оценивать до 123456790
), мне было бы интересно его увидеть. Возможно, однажды в будущем это станет частью языка.
Надеюсь, это поможет; удачи!