Extending vs. implementing a pure abstract class in TypeScript
<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>