मैं कैसे इस तरह के रूप संपत्ति परिभाषाओं फेंकना टाइपप्रति मिलता है:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
मैं कैसे इस तरह के रूप संपत्ति परिभाषाओं फेंकना टाइपप्रति मिलता है:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
आप उपयोग कर सकते हैं getऔर setटाइपप्रति, में जो में संकलित Object.defineProperties।
यह एक ECMAScript 5 सुविधा है, तो आप इसे इस्तेमाल नहीं कर सकते अगर आप ES3 (संकलक के लिए डिफ़ॉल्ट) लक्षित कर रहे हैं। आप ES5 लक्षित करने के लिए खुश हैं, तो जोड़ने के --target ES5अपने आदेश के लिए।
टाइपप्रति:
class MyClass {
private view;
get View() { return this.view; }
set View(value) { this.view = value }
}
को संकलित:
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;
})();
लेकिन तुम गणनीय और विन्यास की स्थापना का पूरा नियंत्रण चाहते हैं - आप अभी भी कच्चे इस्तेमाल कर सकते हैं Object.definePropertiesकोड।
मैं बिल्कुल वही बात के लिए देख रहा था जब मैं पर ठोकर खाई टाइपप्रति पुस्तिका: डेकोरेटर । "विधि डेकोरेटर" पैरा में वे परिभाषित @enumerableडेकोरेटर कारखाना है, जो इस तरह दिखता है (मैं बस कॉपी-पेस्ट वहाँ से):
function enumerable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.enumerable = value;
};
}
और वे इसे इस तरह का उपयोग करें:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
@enumerable(false)
greet() {
return "Hello, " + this.greeting;
}
}
तो यह को संबोधित करने का एक और तरीका है, सज्जाकार के उपयोग के माध्यम से है।
पुनश्च:
यह सुविधा की आवश्यकता है experimentalDecoratorsझंडा को पास करने की tscया में सेट tsconfig.json।
यह वर्तमान में अगर आप चाहते हैं सभी गुण ऐसे ही उत्सर्जित होना समर्थित नहीं है। मैं कम से एक मुद्दा दाखिल की सलाह देते हैं CodePlex साइट क्या आपके उपयोग के मामले और आवश्यकताओं के बारे में विवरण के साथ।
आप --target ES5 साथ संकलन है, तो आप कुछ इस तरह हो सकता है:
class n {
get foo() { return 3; }
bar() { return 5; }
}
जो इस कोड का उत्पादन:
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;
})();