Ich muss ein Objekt zu json in eckigen 2.0.0-rc1 serialisieren, als ich festgestellt, dass Typescript private ist überhaupt nicht privat, und Get Set-Eigenschaft werden nicht ausgegeben durch JSON.stringify.Typoskript: Dekorateure verhalten sich auf eckigen Projekt und Typoskript Spielplatz anders
Also habe ich die Klasse dekorieren aus:
//method decorator
function enumerable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.enumerable = value;
};
}
//property decorator
function exclude(target: any, propertyKey: string): any {
return { enumerable: false };
}
class MyClass {
test: string = "test";
@exclude
testExclude: string = "should be excluded";
@enumerable(true)
get enumerated(): string {
return "yes";
}
@enumerable(false)
get nonEnumerated(): string {
return "non enumerable"
}
}
let x = new MyClass();
//1st
console.log(JSON.stringify(x));
//2nd
console.log(JSON.stringify(x, Object.keys(MyClass.prototype)));
//3rd
console.log(JSON.stringify(x, Object.keys(x).concat(Object.keys(MyClass.prototype))));//test 3
auf Typescript playground gibt diese
{"test":"test"}
{"enumerated":"yes"}
{"test":"test","enumerated":"yes"}
aber auf meinem Projekt (Winkel 2.0.0-rc1), das gibt
{"test":"test","testExclude":"should be excluded"}
{"enumerated":"yes"}
{"test":"test","testExclude":"should be excluded","enumerated":"yes"}
Was ich wirklich will, ist die Ausgabe # 3 vom Spielplatz.
Nach einem Blick auf die transpiled Code nehmen, der einzige Unterschied ist, widerspiegeln-Metadaten-Code:
//snip ...
__decorate([
exclude,
__metadata('design:type', String)
], MyClass.prototype, "testExclude", void 0);
__decorate([
enumerable(true),
__metadata('design:type', String)
], MyClass.prototype, "enumerated", null);
__decorate([
enumerable(false),
__metadata('design:type', String)
], MyClass.prototype, "nonEnumerated", null);
return MyClass;
}());
Nichts davon __metadata
Linien in Spielplatz.
Was passiert hier? Und wie kann ich das Ergebnis des Spielplatzes # 3 für mein Projekt erreichen?
Perfekt funktioniert. speicherte meinen Tag .. –
@KaranPatel vor meiner späteren Antwort gewarnt wird, arbeitet dieser Dekorateur nicht auf verschachtelten Objekten. – Evan
Dank Evan .. Ich habe diese aktuelle Antwort nicht unter Antwort genannt. aber eine Sache, die Sie tun können, ist, können Sie unter Antwort entfernen, wenn es nicht richtig funktioniert. –