1interface BaseInterface { 2 required: number; 3 optional?: number; 4} 5 6class BaseClass { 7 baseMethod() { } 8 baseNumber: number; 9} 10 11interface Child extends BaseInterface { 12 additional: number; 13} 14 15class Child extends BaseClass { 16 classNumber: number; 17 method() { } 18} 19 20interface ChildNoBaseClass extends BaseInterface { 21 additional2: string; 22} 23class ChildNoBaseClass { 24 classString: string; 25 method2() { } 26} 27class Grandchild extends ChildNoBaseClass { 28} 29 30// checks if properties actually were merged 31var child : Child; 32child.required; 33child.optional; 34child.additional; 35child.baseNumber; 36child.classNumber; 37child.baseMethod(); 38child.method(); 39 40var grandchild: Grandchild; 41grandchild.required; 42grandchild.optional; 43grandchild.additional2; 44grandchild.classString; 45grandchild.method2(); 46