-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Closed
Labels
BugA bug in TypeScriptA bug in TypeScriptFixedA PR has been merged for this issueA PR has been merged for this issue
Milestone
Description
TypeScript Version: 2.0.7
TypeScript seems not correctly inherit static properties from a class transpiled with BabelJS
Code
class BaseClass {
static get STATIC_VALUE() {
return 'VALUE'
}
}
class DerivedClass extends BaseClass {}
console.log(BaseClass.STATIC_VALUE === DerivedClass.STATIC_VALUE);Expected behavior:
The comparison is falsy.
Actual behavior:
If BaseClass is transpiled via BabelJS the comparison is falsy.
Pure TypeScript behavior:
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var BaseClass = (function () {
function BaseClass() {
}
Object.defineProperty(BaseClass, "STATIC_VALUE", {
get: function () {
return 'VALUE';
},
enumerable: true,
configurable: true
});
return BaseClass;
}());
var DerivedClass = (function (_super) {
__extends(DerivedClass, _super);
function DerivedClass() {
_super.apply(this, arguments);
}
return DerivedClass;
}(BaseClass));
console.log(BaseClass.STATIC_VALUE === DerivedClass.STATIC_VALUE);
// comparison is truthyBabelJS transpiled BaseClass and TypeScript inheritance behavior:
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var BaseClass = function () {
function BaseClass() {
_classCallCheck(this, BaseClass);
}
_createClass(BaseClass, null, [{
key: 'STATIC_VALUE',
get: function get() {
return 'HELLO';
}
}]);
return BaseClass;
}();
var DerivedClass = (function (_super) {
__extends(DerivedClass, _super);
function DerivedClass() {
_super.apply(this, arguments);
}
return DerivedClass;
}(BaseClass));
console.log(BaseClass.STATIC_VALUE === DerivedClass.STATIC_VALUE);
// comparison is falsyTypeScript transpiled BaseClass and BabelJS inheritance behavior:
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var BaseClass = function () {
function BaseClass() {}
Object.defineProperty(BaseClass, "STATIC_VALUE", {
get: function get() {
return 'VALUE';
},
enumerable: true,
configurable: true
});
return BaseClass;
}();
var DerivedClass = function (_BaseClass) {
_inherits(DerivedClass, _BaseClass);
function DerivedClass() {
_classCallCheck(this, DerivedClass);
return _possibleConstructorReturn(this, (DerivedClass.__proto__ || Object.getPrototypeOf(DerivedClass)).apply(this, arguments));
}
return DerivedClass;
}(BaseClass);
console.log(BaseClass.STATIC_VALUE === DerivedClass.STATIC_VALUE);
// comparison is truthyThe problem is not reproduced in the other side, BabelJS correctly inherit static properties from a class transpiled via TypeScript
NicoPennec and raveclassic
Metadata
Metadata
Assignees
Labels
BugA bug in TypeScriptA bug in TypeScriptFixedA PR has been merged for this issueA PR has been merged for this issue