टाइपप्रति में गुण अनुकूलित करने के लिए कैसे

वोट
10

मैं कैसे इस तरह के रूप संपत्ति परिभाषाओं फेंकना टाइपप्रति मिलता है:

Object.defineProperties(this, {
    view: {
        value: view,
        enumerable: false,
        writable: false,
        configurable: false
    },
});
02/10/2012 को 19:40
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
9

आप उपयोग कर सकते हैं 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कोड।

04/10/2012 को 22:42
का स्रोत उपयोगकर्ता

वोट
4

मैं बिल्कुल वही बात के लिए देख रहा था जब मैं पर ठोकर खाई टाइपप्रति पुस्तिका: डेकोरेटर । "विधि डेकोरेटर" पैरा में वे परिभाषित @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

27/02/2017 को 16:39
का स्रोत उपयोगकर्ता

वोट
1

यह वर्तमान में अगर आप चाहते हैं सभी गुण ऐसे ही उत्सर्जित होना समर्थित नहीं है। मैं कम से एक मुद्दा दाखिल की सलाह देते हैं 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;
})();
02/10/2012 को 19:43
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more