Template literal N=35
No-emit type-check timing for template literal n=35.
tsz is 3.2x faster 128 lines 2 KB
Timing
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;