Intersection N=35

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

tsz is 5.6x faster 229 lines 3 KB

Timing

tsz
86.44ms
tsgo
484.31ms

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

interface Part20 {
    prop20: string;
    shared: number;
    method20(): number;
}

interface Part21 {
    prop21: string;
    shared: number;
    method21(): number;
}

interface Part22 {
    prop22: string;
    shared: number;
    method22(): number;
}

interface Part23 {
    prop23: string;
    shared: number;
    method23(): number;
}

interface Part24 {
    prop24: string;
    shared: number;
    method24(): number;
}

interface Part25 {
    prop25: string;
    shared: number;
    method25(): number;
}

interface Part26 {
    prop26: string;
    shared: number;
    method26(): number;
}

interface Part27 {
    prop27: string;
    shared: number;
    method27(): number;
}

interface Part28 {
    prop28: string;
    shared: number;
    method28(): number;
}

interface Part29 {
    prop29: string;
    shared: number;
    method29(): number;
}

interface Part30 {
    prop30: string;
    shared: number;
    method30(): number;
}

interface Part31 {
    prop31: string;
    shared: number;
    method31(): number;
}

interface Part32 {
    prop32: string;
    shared: number;
    method32(): number;
}

interface Part33 {
    prop33: string;
    shared: number;
    method33(): number;
}

interface Part34 {
    prop34: string;
    shared: number;
    method34(): number;
}

type BigIntersection = Part0 & Part1 & Part2 & Part3 & Part4 & Part5 & Part6 & Part7 & Part8 & Part9 & Part10 & Part11 & Part12 & Part13 & Part14 & Part15 & Part16 & Part17 & Part18 & Part19 & Part20 & Part21 & Part22 & Part23 & Part24 & Part25 & Part26 & Part27 & Part28 & Part29 & Part30 & Part31 & Part32 & Part33 & Part34;

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