In meiner Bibliothek (für AngularJS) Ich versuche, folgende Funktionen zu implementieren:Wie definieren Klasseneigenschaften in Babel deaktivieren + transformations Dekorateure-legacy
- Sie können eine leere Klasse Eigenschaft mit einigen Dekorateur markieren
- Während der Initialisierung wird diese Eigenschaft durch Getter ersetzt, der durch
Object.defineProperty
definiert ist. - Der Benutzer kann diese Eigenschaft innerhalb der Klasse aufrufen, und der Getter wird aufgerufen.
Aber ich habe ein unerwartetes Verhalten in Babel getroffen. In Typescript, das in der Bibliothek verwendet wird, funktioniert es gut, aber Babel erstellt eine Menge Code, der bereits definierte Eigenschaften für seine Initialisierer neu definiert.
Es ist die verzierte Klasse in ES2015:
@Component({
selector: 'test'
})
export class TestClass {
@Inject('$http') $http;
@Inject('$q') $q;
}
Es ist der resultierende Code:
var TestClass = exports.TestClass = (_dec9 = (0, _ngMetasys.Component)({
selector: 'test'
}), _dec10 = (0, _ngMetasys.Inject)('$http'), _dec11 = (0, _ngMetasys.Inject)('$q'), _dec9(_class4 = (_class5 = function TestClass() {
(0, _classCallCheck3.default)(this, TestClass);
// everything is OK, TestClass.prototype.$http is a getter with function() => $http.
_initDefineProp(this, '$http', _descriptor5, this); // there are dragons. Property $http is redefined to undefined.
_initDefineProp(this, '$q', _descriptor6, this);
}, (_descriptor5 = _applyDecoratedDescriptor(_class5.prototype, '$http', [_dec10], {
enumerable: true,
initializer: null
}), _descriptor6 = _applyDecoratedDescriptor(_class5.prototype, '$q', [_dec11], {
enumerable: true,
initializer: null
})), _class5)) || _class4);
Wie kann ich diese Eigenschaft Neudefinition deaktivieren? Gibt es eine Möglichkeit, die Neudefinition von babels Eigentum zu vermeiden oder es zu ersetzen?