Hvordan får jeg Loggfila til å avgi egenskapsdefinisjoner for eksempel:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Hvordan får jeg Loggfila til å avgi egenskapsdefinisjoner for eksempel:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Du kan bruke getog seti maskinskrevet manuskript, som kompilere inn Object.defineProperties.
Dette er en ECMAScript 5 funksjonen, slik at du kan ikke bruke den hvis du er rettet ES3 (standard for kompilatoren). Hvis du er glad for å målrette ES5, legge --target ES5til din kommando.
Loggfila:
class MyClass {
private view;
get View() { return this.view; }
set View(value) { this.view = value }
}
Kompilerer til:
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;
})();
Men hvis du vil ha full kontroll over innstillingen enumerable og konfigurerbar - du kan fortsatt bruke den rå Object.definePropertieskode.
Jeg var ute etter akkurat det samme da jeg snublet over Loggfila Handbook: dekoratører . I "Metode dekoratører" paragrafen definerer de @enumerabledekoratør fabrikken, som ser slik ut (jeg er bare kopiere lime derfra):
function enumerable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.enumerable = value;
};
}
og de bruker det slik:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
@enumerable(false)
greet() {
return "Hello, " + this.greeting;
}
}
Så en annen måte å håndtere det, er gjennom bruk av dekoratører.
PS:
Denne funksjonen krever experimentalDecoratorsflagget som skal sendes til tsceller satt i tsconfig.json.
Dette støttes ikke hvis du vil at alle egenskapene som skal slippes ut sånn. Jeg vil anbefale å sende inn en sak på CodePlex nettstedet med informasjon om hva din bruk saken og kravene er.
Hvis du kompilere med Target ES5, kan du ha noe sånt som dette:
class n {
get foo() { return 3; }
bar() { return 5; }
}
Som produserer denne koden:
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;
})();