Template literal N=45

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

tsz is 1.8x faster 158 lines 2 KB

Timing

tsz
277.89ms
tsgo
511.90ms

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'
    | 'color35'
    | 'color36'
    | 'color37'
    | 'color38'
    | 'color39'
    | 'color40'
    | 'color41'
    | 'color42'
    | 'color43'
    | 'color44';

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'
    | 'size35'
    | 'size36'
    | 'size37'
    | 'size38'
    | 'size39'
    | 'size40'
    | 'size41'
    | 'size42'
    | 'size43'
    | 'size44';

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'
    | 'variant35'
    | 'variant36'
    | 'variant37'
    | 'variant38'
    | 'variant39'
    | 'variant40'
    | 'variant41'
    | 'variant42'
    | 'variant43'
    | 'variant44';

// 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;