// @target: es2015
// @Filename: overloadBindingAcrossDeclarationBoundaries_file0.ts
interface Opt1 {
    p?: any;
}
interface Opt2 {
    q?: any;
}
interface Opt3 {
    r?: any;
}
interface Opt4 {
    s?: any;
}

interface A {
    a(o: Opt1): Opt1;
    a(o: Opt2): Opt2;
    (o: Opt1): Opt1;
    (o: Opt2): Opt2;
    new (o: Opt1): Opt1;
    new (o: Opt2): Opt2;
}

// @Filename: overloadBindingAcrossDeclarationBoundaries_file1.ts
interface A {
    a(o: Opt3): Opt3;
    a(o: Opt4): Opt4;
    (o: Opt3): Opt3;
    (o: Opt4): Opt4;
    new (o: Opt3): Opt3;
    new (o: Opt4): Opt4;
}

var a: A;
// These should all be Opt3
var a1 = a.a({});
var a1 = a({});
var a1 = new a({});