microsoft / microsoft/TypeScript

Can't use async arrow function in/before super call

Open
#42,667 2 comments 1 reaction 1 assignee View on GitHub

@rbuckton is already working on this.

Since Feb 5, 2021.

Bug Domain: classes Rescheduled
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

Bug Report

🔎 Search Terms

super async arrow function this

🕗 Version & Regression Information

This only occurs using a target version of ES2016 or lower.

⏯ Playground Link

https://www.typescriptlang.org/play?target=3&ts=4.1.3#code/MYGwhgzhAECC0G8BQ1rAPYDsIBcBOArsDungBQBmmAXNGQJTQC8AfNAAp7oC2AlhAFMAPADd0vACYtGyVKioMA3CmgBfJOqShIMAELQBADxwDMEmPFlosuQsVINEK1BAIAHAeUgBPTMDqMrE5ychjY6CACAHQg6ADmZABEABICILGJ9Mohqlkq6pqYAgDu0LpKQA

💻 Code

This works:

class A {
  constructor(fn: () => Promise<void>) {
    fn();
  }
}

class B extends A {
  constructor() {
    super(async function () {
      console.log("Hello");
    });
  }
}

new B();

This doesn't:

class A {
  constructor(fn: () => Promise<void>) {
    fn();
  }
}

class B extends A {
  constructor() {
    super(async () => {
      console.log("Hello");
    });
  }
}

new B();

The difference between the examples is the use of an arrow function vs a traditional function.

🙁 Actual behavior

It compiles crashes however at runtime with this error message:
ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor

The error lies in the generated __awaiter function trying to access this. The traditional function wraps the __awaiter call (therefore binding its own this) not causing it to fail.

🙂 Expected behavior

Print Hello to the console.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.