#TypeScriptで数値の範囲を指定する型を定義する

TypeScriptで数値(0以上の整数のみ)の範囲を指定するには、type-festIntRangeを使います。

import type { IntRange } from 'type-fest'

let foo: IntRange<0, 101> = 0

const bar: IntRange<0, 101> = 100

const baz: IntRange<0, 101, 10> = 30

function isIntRange<S extends number, T extends number, U extends number = 1>(v: number, min: S, max: T): v is IntRange<S, T, U> {
  return v >= min && v < max
}

const a = 3

if (isIntRange(a, 1, 10)) {
  foo = a
}

これをstringのUnion型の型定義へ変換する方法はこちらを見てください。