<p dir="auto">I'm not 100% sure this is by ES6 spec but the following code errors on Edge and Firefox Nightly:</p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="new (class extends Promise {
  constructor() {
    let newThis = this; // Edge: Use before declaration, Firefox: |this| used uninitialized in anonymous class constructor
    super((resolve, reject) =&gt; resolve());
  }
})()"><pre class="notranslate"><span class="pl-k">new</span> <span class="pl-kos">(</span><span class="pl-k">class</span> <span class="pl-k">extends</span> <span class="pl-smi">Promise</span> <span class="pl-kos">{</span>
  <span class="pl-en">constructor</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-k">let</span> <span class="pl-s1">newThis</span> <span class="pl-c1">=</span> <span class="pl-smi">this</span><span class="pl-kos">;</span> <span class="pl-c">// Edge: Use before declaration, Firefox: |this| used uninitialized in anonymous class constructor</span>
    <span class="pl-smi">super</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-s1">resolve</span><span class="pl-kos">,</span> <span class="pl-s1">reject</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-en">resolve</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
  <span class="pl-kos">}</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">(</span><span class="pl-kos">)</span></pre></div>
<p dir="auto">ES6 disallow to use this before super call.</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="class Aaa {
  constructor(v: () =&gt; number) {
  }
}
class Bbb extends Aaa {
  vv: number;
  constructor() {
    this.vv = 111;
    super(this.vvv);
  }
  vvv(): number { return 0; }
}"><pre class="notranslate"><code class="notranslate">class Aaa {
  constructor(v: () =&gt; number) {
  }
}
class Bbb extends Aaa {
  vv: number;
  constructor() {
    this.vv = 111;
    super(this.vvv);
  }
  vvv(): number { return 0; }
}
</code></pre></div>
<p dir="auto">The line "this.vv = 111;" must be after super statement.<br>
The super statement also cannot contain this usage.<br>
Compilation to ES6 gives:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="class Aaa {
    constructor(v) {
    }
}
class Bbb extends Aaa {
    constructor() {
        this.vv = 111;
        super(this.vvv);
    }
    vvv() { return 0; }
}"><pre class="notranslate"><code class="notranslate">class Aaa {
    constructor(v) {
    }
}
class Bbb extends Aaa {
    constructor() {
        this.vv = 111;
        super(this.vvv);
    }
    vvv() { return 0; }
}
</code></pre></div>
<p dir="auto">So even if TS wants to relax "this usage before super" (which i doubt), then it must fix in generated ES6 code.</p>