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
