Wie erhalte ich Typoskript Eigenschaftsdefinitionen zu emittieren, wie:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Wie erhalte ich Typoskript Eigenschaftsdefinitionen zu emittieren, wie:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Sie können verwendet werden getund setin Maschinenschrift, die kompilieren in Object.defineProperties.
Dies ist eine ECMAScript 5 - Funktion, so dass Sie es nicht verwenden , wenn Sie ES3 sind Targeting (die Standardeinstellung für den Compiler). Wenn Sie glücklich sind ES5 Ziel, fügen Sie --target ES5zu Ihren Diensten .
Typoskript:
class MyClass {
private view;
get View() { return this.view; }
set View(value) { this.view = value }
}
Compiliert zu:
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;
})();
Aber wenn Sie die volle Kontrolle wollen zählbare und konfigurierbar neu eingestellt werden - man könnte noch den rohen verwendet Object.definePropertiesCode.
Ich war auf der Suche nach genau der gleichen Sache , wenn ich gestolpert Typoskript Handbuch: Dekorateure . In „Method Zierer“ Absatz definieren sie @enumerableDekorateur Fabrik, die wie folgt (von dort bin ich einfach kopieren-Einfügen) aussieht:
function enumerable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.enumerable = value;
};
}
und sie nutzen es wie folgt aus:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
@enumerable(false)
greet() {
return "Hello, " + this.greeting;
}
}
So ein anderer Weg, um es anzugehen, ist durch Verwendung von Dekorateure.
PS:
Diese Funktion erfordert experimentalDecoratorsFlagge übergeben werden tscoder eingestellt tsconfig.json.
Dies wird derzeit nicht unterstützt , wenn Sie wollen , dass alle Eigenschaften wie die emittiert werden. Ich würde empfehlen , ein Problem bei der Einreichung CodePlex - Website mit Informationen über das, was Ihren Anwendungsfall und Anforderungen sind.
Wenn Sie mit --target ES5 tun kompilieren, können Sie so etwas wie dieses:
class n {
get foo() { return 3; }
bar() { return 5; }
}
Welche produziert diesen Code:
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;
})();