Typescript: тип номера приращения - PullRequest
0 голосов
/ 17 января 2019

Возможно ли из типа номера T получить тип номера Y со значением T + 1.

type one = 1

type Increment<T extends number> = ???

type two = Increment<one> // 2

P.S. В настоящее время у меня есть жестко закодированный интерфейс инкрементных значений, но проблема жестко закодирована и, следовательно, ограничена:

export type IncrementMap = {
    0: 1,
    1: 2,
    2: 3,

1 Ответ

0 голосов
/ 17 января 2019

Я бы просто запрограммировал это так:

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), мне было бы интересно его увидеть. Возможно, однажды в будущем это станет частью языка.

Надеюсь, это поможет; удачи!

...