Skip to content

jsx: react-jsxdev passes this to jsxDEV before super() returns #65415

Open

Description

@trackoor

🔎 Search Terms

react-jsxdev super this, jsxDEV self before super, Must call super constructor jsx

🕗 Version & Regression Information

Not a regression; jsx: react-jsx is correct.

  • Fails: 6.0.3, 7.0.2, 7.1.0-dev.20261107.1, 7.1.0-dev.20261109.1

⏯ Playground Link

https://www.typescriptlang.org/play/v2/?ts=6.0.3#code/v2/N4IghgxgLglgbgUwGIwDYJALhAegO4D2ATgNYDOADpAjkVDgFZkAeAtACYJytECuAdrAC2CAHRQyIADQgAZmgSTMofMXJUINCRAL95Ac1FNdWEMAA6-AARXzIHUIoKiAeQqxdZO5isXrN2xAyKCIYaG8rEN4EKUsAwP4CAElHVDCYKAAlBCheIn4vLEi+GLiAuzBUVAI8AFV+IgRIAAswACN0AGECTgjZSrJS-xsKqpr63kH2ABl2hFRCn36Fofi7RQBZHt50JMEEIgIKCKjV8pBOCFQwIjAPfhOS2OHAoW30CLsHN-4mO2e1iA3uwdghsmQCKhePdPiBEr1pGURiAoDd9DlYYp+AhmFB-kjAkxmLDGpAoKwiZw4PiXnZJggACIIeTYpDETrXMhkFDzdiLKzLQYA84wfSJRpMiiNCB3GCeWEANlEAAY7GUAL6WTX8aS4QikSjUWj0IkcLg8ATCMQSUw4HBWDYwfgwISVKzBMD8disJ0C4hWUnQRgsM3cPiCF0IKwACjIYBE7tF-DueSjYDIVmyZIA5BmiQyAKIANQAlKJLDiKMQoAKBNA5dZ88Xo1AAJ4UBA+T2tqRWKVHMhd-g9qwkBCtgD8Q5HMDIAGVUbAIFOrG0CJCmvxexC8poV93t-NZPvhyXfGVGrl8r5Iu2Yn3DhQM+qANxaivMKt0KzJkSGzRWAAUnOAAa57+JW1a3h2VgFugIiCFYAC8N5th204vg+A7TlYr5lJB35OlABz9ABewhE6ZBhHBCAIRIN4ANq-p27oUfw+gALo4dq2q6qoBoaDQTqcMw4gsLaABUElWAAAkSKRflAc4ELuUaiMaVgSTglhXOmGYAELplGfg2DoBRRNAxDRhQvAdGEVhmcRgg+MA0EsQIJCJHg1jqmewA8TpnIZp0NzsFYOJOXyViGYM4GmZ4FlQFZsBQOgPjBKE7F+QSZC8B2RDRgAPM0ABMAB8wApeg6qFTgpVlSWmF2gGTTQBSLBUuFQgZH2emKFYAAGUDNLOA2RAQVgAPpNkWq7MsQUa5fl0ZnpeeQFBq778GZELoKI1T6NG2J4FYIVEOw0Z2AAEvM1R2GWjkIII4h3o1VjNZWCDQAgYV2KVdiYWSvButksgHE9mgFkQhxEJYIDqjIgzoPWJjKCAVZUfc3RQkIOqYAAjDIGMZA20xOggAByvBCG0BxYITQTzF99wLjcUDY9TeMM0jzMNqzdBk9iVM03TBMIyAiBEFRqMleqQA

(Playground v2, 6.0.3; press Run. The project uses a six-line local jsx-dev-runtime with React's jsxDEV signature, so no packages are needed.)

💻 Code

/** @jsxImportSource ./rt */
class Base { constructor(public content: { type: unknown }) {} }
class Card extends Base {
  constructor(title: string) {
    super(<h2>{title}</h2>);
  }
}
console.log(new Card("Hello").content.type);

🙁 Actual behavior

The emit passes this as the self argument of _jsxDEV(...) inside the super(...) arguments, so the constructor throws ReferenceError: Must call super constructor in derived class before accessing 'this'. There is no compile error, and jsx: react-jsx works.

🙂 Expected behavior

h2 is printed: pass undefined for self when this is not yet available (before super() in a derived constructor), as Babel and esbuild do for the same case.


This was found with an AI-assisted differential testing tool; the repros and outputs above were re-run on the listed versions.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions