//// [tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple2.ts] ////

//// [bestCommonTypeOfTuple2.ts]
interface base { }
interface base1 { i }
class C implements base { c }
class D implements base { d }
class E implements base { e }
class F extends C { f }

class C1 implements base1 { i = "foo"; c }
class D1 extends C1 { i = "bar"; d }

declare var t1: [C, base];
declare var t2: [C, D];
declare var t3: [C1, D1];
declare var t4: [base1, C1];
declare var t5: [C1, F]

var e11 = t1[4]; // base
var e21 = t2[4]; // {}
var e31 = t3[4]; // C1
var e41 = t4[2]; // base1
var e51 = t5[2]; // {}


//// [bestCommonTypeOfTuple2.js]
"use strict";
class C {
}
class D {
}
class E {
}
class F extends C {
}
class C1 {
    constructor() {
        this.i = "foo";
    }
}
class D1 extends C1 {
    constructor() {
        super(...arguments);
        this.i = "bar";
    }
}
var e11 = t1[4]; // base
var e21 = t2[4]; // {}
var e31 = t3[4]; // C1
var e41 = t4[2]; // base1
var e51 = t5[2]; // {}
