Extending vs. implementing a pure abstract class in TypeScript Extending vs. implementing a pure abstract class in TypeScript typescript typescript