==== tests/cases/conformance/interfaces/interfaceDeclarations/interfaceWithMultipleBaseTypes.ts (6 errors) ==== // 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 ~~~~~~~~ !!! Interface 'Derived2' incorrectly extends interface 'Base2': !!! Types of property 'x' are incompatible: !!! Type '{ a: string; b: number; }' is not assignable to type '{ b: string; }': !!! Types of property 'b' are incompatible: !!! Type 'number' is not assignable to type 'string'. 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 'Derived3' cannot simultaneously extend types 'Base1' and 'Base2': !!! Named properties 'x' of types 'Base1' and 'Base2' are not identical. interface Derived4 extends Base1, Base2 { // error ~~~~~~~~ !!! Interface 'Derived4' incorrectly extends interface 'Base1': !!! Types of property 'x' are incompatible: !!! Type '{ a: T; b: T; }' is not assignable to type '{ a: number; }': !!! Types of property 'a' are incompatible: !!! Type 'T' is not assignable to type 'number'. ~~~~~~~~ !!! Interface 'Derived4' incorrectly extends interface 'Base2': !!! Types of property 'x' are incompatible: !!! Type '{ a: T; b: T; }' is not assignable to type '{ b: number; }': !!! Types of property 'b' are incompatible: !!! Type 'T' is not assignable to type 'number'. x: { a: T; b: T; } } interface Derived5 extends Base1, Base2 { // error ~~~~~~~~ !!! Interface 'Derived5' incorrectly extends interface 'Base1': !!! Types of property 'x' are incompatible: !!! Type 'T' is not assignable to type '{ a: T; }': !!! Property 'a' is missing in type '{}'. ~~~~~~~~ !!! Interface 'Derived5' incorrectly extends interface 'Base2': !!! Types of property 'x' are incompatible: !!! Type 'T' is not assignable to type '{ b: T; }': !!! Property 'b' is missing in type '{}'. x: T; } }