sucrase icon indicating copy to clipboard operation
sucrase copied to clipboard

export default anonymous class with class field

Open xyc opened this issue 5 years ago • 2 comments

Thanks for this great project!

I had an issue when exporting an anonymous class with class field, generated class has null.prototype.__init.call(this); in the constructor, which results in an error.

Example reproduction: https://sucrase.io/#compressedCode=H4sIAPiJz1wAAz2LQQ6DIBBF95zi79SNXqDtpjfwBkSG1AShGUZjYri7QLWbyfv%2F%2FZmXb2DBSHoSWA4LGi7cKNqrMWT16gST0zGCdiFv4m%2Ffv0P%2B9uQFhwI0njhSBs4T4rarbYmyskdbA%2FAw8%2Fa6GPiQc%2BE2w191%2BSaVTgWpPpSeAAAA

Code:

import React from 'react'
export default class extends React.Component {
  a = {}
  render() {
    return (
      <div>
        hello
      </div>
    )
  }
}

Generated code:

"use strict";const _jsxFileName = "sample.tsx"; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }Object.defineProperty(exports, "__esModule", {value: true});var _react = require('react'); var _react2 = _interopRequireDefault(_react);
exports. default = class extends _react2.default.Component {constructor(...args) { super(...args); null.prototype.__init.call(this); }
  __init() {this.a = {}}
  render() {
    return (
      _react2.default.createElement('div', {__self: this, __source: {fileName: _jsxFileName, lineNumber: 6}}, "hello"

      )
    )
  }
}

xyc avatar May 06 '19 01:05 xyc

I am also having this issue.

joshjung avatar May 22 '19 15:05 joshjung

This appears to be fixed. In the sandbox, I see the output

"use strict";const _jsxFileName = "sample.tsx";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _class;var _react = require('react'); var _react2 = _interopRequireDefault(_react);
exports. default = (_class = class extends _react2.default.Component {constructor(...args) { super(...args); _class.prototype.__init.call(this); }
  __init() {this.a = {}}
  render() {
    return (
      _react2.default.createElement('div', {__self: this, __source: {fileName: _jsxFileName, lineNumber: 6}}, "hello"

      )
    )
  }
}, _class)

forivall avatar Oct 12 '22 20:10 forivall