abstract class A { t: T; abstract foo(): T; abstract bar(t: T); } abstract class B extends A {} class C extends A {} // error -- inherits abstract methods class D extends A {} // error -- inherits abstract methods class E extends A { // error -- doesn't implement bar foo() { return this.t; } } class F extends A { // error -- doesn't implement foo bar(t : T) {} } class G extends A { foo() { return this.t; } bar(t: T) { } }