// @flow class SuperClass { something () { } } class SubClass extends SuperClass { } function decorateWithSomethingElse > (SuperClass: T): T { return class SomethingElseAdded extends SuperClass { addSomethingElse () { } } } var SubClassWithSomethingElse = decorateWithSomethingElse(SubClass) // (new SubClass) instanceof SuperClass -> true // (new SubClassWithSomethingElse) instanceof SubClass -> true // (new SubClassWithSomethingElse) instanceof SuperClass -> true