Jak získám strojopisem emitovat definice vlastností, jako je:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Jak získám strojopisem emitovat definice vlastností, jako je:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Můžete použít geti setna stroji, který sestaví do Object.defineProperties.
To je ECMAScript 5 funkce, takže jej nelze použít, pokud jste se zaměřují ES3 (výchozí nastavení pro kompilátor). Pokud jste spokojeni se zaměřit ES5, přidat --target ES5do svého velení.
strojopisem:
class MyClass {
private view;
get View() { return this.view; }
set View(value) { this.view = value }
}
Sestavuje na adresu:
var MyClass = (function () {
function MyClass() { }
Object.defineProperty(MyClass.prototype, "View", {
get: function () {
return this.view;
},
set: function (value) {
this.view = value;
},
enumerable: true,
configurable: true
});
return MyClass;
})();
Ale pokud chcete plnou kontrolu nad nastavením enumerable a konfigurovatelný - můžete i nadále používat syrové Object.definePropertieskód.
Hledal jsem přesně to samé, když jsem narazil na psacím stroji Příručky: dekoratéry . V „Metoda dekoratérů“ odstavce definují @enumerabledekoratér továrny, která vypadá takto (Jsem jednoduše zkopírovat-vkládání odtamtud):
function enumerable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.enumerable = value;
};
}
a oni ho používají takto:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
@enumerable(false)
greet() {
return "Hello, " + this.greeting;
}
}
Tak další způsob, jak ji řešit, je přes použití dekoratérů.
PS:
Tato funkce vyžaduje experimentalDecoratorspříznak které mají být předány tscnebo nastavit tsconfig.json.
To v současné době není podporována, pokud chcete, aby všechny vlastnosti, které mají být emitovány takhle. Doporučoval bych podání problém na místě CodePlex s podrobnostmi o tom, co váš případ použití a požadavky.
Pokud tak učiníte kompilace s --target ES5, můžete mít něco takového:
class n {
get foo() { return 3; }
bar() { return 5; }
}
Který produkuje tento kód:
var n = (function () {
function n() { }
Object.defineProperty(n.prototype, "foo", {
get: function () {
return 3;
},
enumerable: true,
configurable: true
});
n.prototype.bar = function () {
return 5;
};
return n;
})();