<p dir="auto">With a generic base class,</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="class GenericBase&lt;T&gt; {
    value: T;
}"><pre class="notranslate"><code class="notranslate">class GenericBase&lt;T&gt; {
    value: T;
}
</code></pre></div>
<p dir="auto">this compiles without errors:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="class StringBase extends GenericBase&lt;string&gt; { }
class Foo extends StringBase { }
var foo = new Foo();
foo.value.charCodeAt(0); // OK"><pre class="notranslate"><code class="notranslate">class StringBase extends GenericBase&lt;string&gt; { }
class Foo extends StringBase { }
var foo = new Foo();
foo.value.charCodeAt(0); // OK
</code></pre></div>
<p dir="auto">but this produces an error that <code class="notranslate">Property 'charCodeAt' does not exist on type 'T'</code>:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="function makeBase&lt;T&gt;() {
    return class extends GenericBase&lt;T&gt; { };
}
class Bar extends makeBase&lt;string&gt;() { }
var bar = new Bar();
bar.value.charCodeAt(0); // compile error"><pre class="notranslate"><code class="notranslate">function makeBase&lt;T&gt;() {
    return class extends GenericBase&lt;T&gt; { };
}
class Bar extends makeBase&lt;string&gt;() { }
var bar = new Bar();
bar.value.charCodeAt(0); // compile error
</code></pre></div>
<p dir="auto">Since <code class="notranslate">string</code> has been used as the generic parameter for <code class="notranslate">makeBase</code>, it seems that none of the properties on <code class="notranslate">Bar</code> should be typed as <code class="notranslate">T</code>.</p>
<p dir="auto">When using <code class="notranslate">extends</code> in a class expression, the generic types do not propagate correctly to the super class of the expression.   The below example should compile (I think!), but fails with <code class="notranslate">Type 'C' is not assignable to type 'T'</code>.</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="class A&lt;T&gt; {
    genericVar: T
}

function B&lt;T&gt;() {
    return class extends A&lt;T&gt; {
    }
}

class C extends B&lt;C&gt;() {
    name: string;
}

var c = new C();
c.genericVar = c;"><pre class="notranslate"><code class="notranslate">class A&lt;T&gt; {
    genericVar: T
}

function B&lt;T&gt;() {
    return class extends A&lt;T&gt; {
    }
}

class C extends B&lt;C&gt;() {
    name: string;
}

var c = new C();
c.genericVar = c;
</code></pre></div>