Intersection N=45

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

tsz is 5.7x faster 289 lines 4 KB

Timing

tsz
87.70ms
tsgo
496.50ms

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

interface Part35 {
    prop35: string;
    shared: number;
    method35(): number;
}

interface Part36 {
    prop36: string;
    shared: number;
    method36(): number;
}

interface Part37 {
    prop37: string;
    shared: number;
    method37(): number;
}

interface Part38 {
    prop38: string;
    shared: number;
    method38(): number;
}

interface Part39 {
    prop39: string;
    shared: number;
    method39(): number;
}

interface Part40 {
    prop40: string;
    shared: number;
    method40(): number;
}

interface Part41 {
    prop41: string;
    shared: number;
    method41(): number;
}

interface Part42 {
    prop42: string;
    shared: number;
    method42(): number;
}

interface Part43 {
    prop43: string;
    shared: number;
    method43(): number;
}

interface Part44 {
    prop44: string;
    shared: number;
    method44(): 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 & Part35 & Part36 & Part37 & Part38 & Part39 & Part40 & Part41 & Part42 & Part43 & Part44;

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