=== tests/cases/compiler/baseIndexSignatureResolution.ts === class Base { private a: string; } >Base : Base >a : string class Derived extends Base { private b: string; } >Derived : Derived >Base : Base >b : string // Note - commmenting "extends Foo" prevents the error interface Foo { >Foo : Foo [i: number]: Base; >i : number >Base : Base } interface FooOf extends Foo { >FooOf : FooOf >TBase : TBase >Base : Base >Foo : Foo [i: number]: TBase; >i : number >TBase : TBase } var x: FooOf = null; >x : FooOf >FooOf : FooOf >Derived : Derived var y: Derived = x[0]; >y : Derived >Derived : Derived >x[0] : Derived >x : FooOf /* // Note - the equivalent for normal interface methods works fine: interface A { foo(): Base; } interface B extends A { foo(): TBase; } var b: B = null; var z: Derived = b.foo(); */