typescript - Är det möjligt med mallsträngstyper att validera att en numerisk del är större än nästa?


Jag försöker definiera Record för migrationsfunktioner, som använder riktningen för migrationen som nyckel: v${number}-v${number},

Eftersom det är alla UP-migrationer, bör de valideras som v$ {first-number}-v$ {first-number + 1} och first-number + 1 bör inte vara mer än något jag definierade om möjligt.

Kan detta göras med mallsträngar eller måste jag göra det vid körning?

Svar #1

Detta borde fungera. Du kan också använda en mer generell implementation av Next med tupler, men det kan bli lite långsamt

type NRange<
    I extends number,
    To extends number,
    R extends number = never
> = I extends To ? R & number
    : NRange<Next<I>, To, R | I>;

type Next<N extends number> = [1,2,3,4,5,6,7,8,9,10,11,12][N];

type Migration<From extends number, To extends number> =
    `v${From}-v${NRange<Next<From>, To>}`


type M = Migration<2,7>

lekplats