Template literal N=35

No-emit type-check timing for template literal n=35.

tsz is 3.2x faster 128 lines 2 KB

Timing

tsz
141.25ms
tsgo
446.79ms

Files

// Template literal type expansion stress test
// Tests Cartesian product explosion prevention

type Colors =
    | 'color0'
    | 'color1'
    | 'color2'
    | 'color3'
    | 'color4'
    | 'color5'
    | 'color6'
    | 'color7'
    | 'color8'
    | 'color9'
    | 'color10'
    | 'color11'
    | 'color12'
    | 'color13'
    | 'color14'
    | 'color15'
    | 'color16'
    | 'color17'
    | 'color18'
    | 'color19'
    | 'color20'
    | 'color21'
    | 'color22'
    | 'color23'
    | 'color24'
    | 'color25'
    | 'color26'
    | 'color27'
    | 'color28'
    | 'color29'
    | 'color30'
    | 'color31'
    | 'color32'
    | 'color33'
    | 'color34';

type Sizes =
    | 'size0'
    | 'size1'
    | 'size2'
    | 'size3'
    | 'size4'
    | 'size5'
    | 'size6'
    | 'size7'
    | 'size8'
    | 'size9'
    | 'size10'
    | 'size11'
    | 'size12'
    | 'size13'
    | 'size14'
    | 'size15'
    | 'size16'
    | 'size17'
    | 'size18'
    | 'size19'
    | 'size20'
    | 'size21'
    | 'size22'
    | 'size23'
    | 'size24'
    | 'size25'
    | 'size26'
    | 'size27'
    | 'size28'
    | 'size29'
    | 'size30'
    | 'size31'
    | 'size32'
    | 'size33'
    | 'size34';

type Variants =
    | 'variant0'
    | 'variant1'
    | 'variant2'
    | 'variant3'
    | 'variant4'
    | 'variant5'
    | 'variant6'
    | 'variant7'
    | 'variant8'
    | 'variant9'
    | 'variant10'
    | 'variant11'
    | 'variant12'
    | 'variant13'
    | 'variant14'
    | 'variant15'
    | 'variant16'
    | 'variant17'
    | 'variant18'
    | 'variant19'
    | 'variant20'
    | 'variant21'
    | 'variant22'
    | 'variant23'
    | 'variant24'
    | 'variant25'
    | 'variant26'
    | 'variant27'
    | 'variant28'
    | 'variant29'
    | 'variant30'
    | 'variant31'
    | 'variant32'
    | 'variant33'
    | 'variant34';

// Template literal Cartesian products
type ProductSmall = `${Colors}-${Sizes}`;
type ProductMedium = `${Colors}-${Sizes}-${Variants}`;

// String manipulation types
type Prefixed = `prefix_${Colors}`;
type Suffixed = `${Colors}_suffix`;
type Wrapped = `[${Colors}]`;

// Nested template
type NestedTemplate = `start_${`mid_${Colors}`}_end`;

declare const product: ProductSmall;
declare const prefixed: Prefixed;