// an interface may have multiple bases with properties of the same name as long as the interface's implementation satisfies all base type versions interface Base1 { x: { a: string; } } interface Base2 { x: { b: string; } } interface Derived extends Base1, Base2 { x: { a: string; b: string; } } interface Derived2 extends Base1, Base2 { // error x: { a: string; b: number; } } module Generic { interface Base1 { x: { a: T; } } interface Base2 { x: { b: T; } } interface Derived extends Base1, Base2 { x: { a: string; b: number; } } interface Derived2 extends Base1, Base2 { x: { a: T; b: U; } } interface Derived3 extends Base1, Base2 { } // error interface Derived4 extends Base1, Base2 { // error x: { a: T; b: T; } } interface Derived5 extends Base1, Base2 { // error x: T; } }