Intersection N=20

No-emit type-check timing for intersection n=20.

tsz is 6.7x faster 139 lines 2 KB

Timing

tsz
56.83ms
tsgo
380.35ms

Files

// Intersection type stress test
// Tests intersection normalization and property merging

interface Part0 {
    prop0: string;
    shared: number;
    method0(): number;
}

interface Part1 {
    prop1: string;
    shared: number;
    method1(): number;
}

interface Part2 {
    prop2: string;
    shared: number;
    method2(): number;
}

interface Part3 {
    prop3: string;
    shared: number;
    method3(): number;
}

interface Part4 {
    prop4: string;
    shared: number;
    method4(): number;
}

interface Part5 {
    prop5: string;
    shared: number;
    method5(): number;
}

interface Part6 {
    prop6: string;
    shared: number;
    method6(): number;
}

interface Part7 {
    prop7: string;
    shared: number;
    method7(): number;
}

interface Part8 {
    prop8: string;
    shared: number;
    method8(): number;
}

interface Part9 {
    prop9: string;
    shared: number;
    method9(): number;
}

interface Part10 {
    prop10: string;
    shared: number;
    method10(): number;
}

interface Part11 {
    prop11: string;
    shared: number;
    method11(): number;
}

interface Part12 {
    prop12: string;
    shared: number;
    method12(): number;
}

interface Part13 {
    prop13: string;
    shared: number;
    method13(): number;
}

interface Part14 {
    prop14: string;
    shared: number;
    method14(): number;
}

interface Part15 {
    prop15: string;
    shared: number;
    method15(): number;
}

interface Part16 {
    prop16: string;
    shared: number;
    method16(): number;
}

interface Part17 {
    prop17: string;
    shared: number;
    method17(): number;
}

interface Part18 {
    prop18: string;
    shared: number;
    method18(): number;
}

interface Part19 {
    prop19: string;
    shared: number;
    method19(): number;
}

type BigIntersection = Part0 & Part1 & Part2 & Part3 & Part4 & Part5 & Part6 & Part7 & Part8 & Part9 & Part10 & Part11 & Part12 & Part13 & Part14 & Part15 & Part16 & Part17 & Part18 & Part19;

// Function overload intersection
type OverloadIntersection =
    ((x: string) => string) &
    ((x: number) => number) &
    ((x: boolean) => boolean);

// Generic intersection
type GenericIntersection<T, U> = T & U;


declare const big: BigIntersection;
const _prop0 = big.prop0;
const _shared = big.shared;
const _propLast = big.prop19;