// @target: es2015
interface A { a: number; }
interface B extends A { b: number; }

// Good case
interface D {
    [s: string]: A;
}
interface D {
    [n: number]: B;
}

// Bad case
interface E {
    [s: string]: B;
}
interface E {
    [n: number]: A;
}

// Inheritance
interface F {
    [s: string]: B;
}
interface G extends F {
    [n: number]: A;
}

// Other way
interface H {
    [n: number]: A;
}
interface I extends H {
    [s: string]: B;
}

// With hidden indexer
interface J {
    [n: number]: {};
}
interface K extends J {
    [n: number]: A;
    [s: string]: B;
}