title: Extending vs. implementing a pure abstract class in TypeScript
body: <p>Suppose I have a pure abstract class (that is, an abstract class without any implementation):</p>
  
  <pre><code>abstract class A {
      abstract m(): void;
  }
  </code></pre>
  
  <p>Like in C# and Java, I can <strong>extend</strong> the abstract class:</p>
  
  <pre><code>class B extends A {
      m(): void { }
  }
  </code></pre>
  
  <p>But <em>unlike</em> in C# and Java, I can also <strong>implement</strong> the abstract class:</p>
  
  <pre><code>class C implements A {
      m(): void { }
  }
  </code></pre>
  
  <p>How do classes <code>B</code> and <code>C</code> behave differently? Why would I choose one versus the other?</p>
  
  <p>(Currently, the TypeScript <a href="http://www.typescriptlang.org/Handbook" rel="noreferrer">handbook</a> and <a href="https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md" rel="noreferrer">language specification</a> don't cover abstract classes.)</p>