2013-03-14 12 views
9

में मॉड्यूल के अंदर प्राप्त/सेट के साथ एक चर बनाना, मैं मॉड्यूल के अंदर get/set गुणों के साथ एक चर बनाना चाहता हूं। मैं एक प्राप्त/सेट संपत्ति एक वर्ग है कि इस तरह दिखता है अंदर बनाने के लिए कुछ कार्य करने वाले उदाहरणों देखा:टाइपस्क्रिप्ट

class MyClass { 
    private view; 
    get View() { return this.view; } 
    set View(value) { this.view = value } 
} 

लेकिन मैं एक मॉड्यूल के अंदर भी ऐसा ही करना चाहते हैं:

module MyModule { 
    export var view; 
    //I want to create get/set methods for view property here 
} 

मैं कैसे करते हैं उस ?

उत्तर

11

मुझे लगता है कि यह सिर्फ एक निरीक्षण है; मैं इसे डिज़ाइन टीम के साथ उठाऊंगा (मुझे कोई स्पष्ट कारण नहीं दिख रहा है कि इसे "अभी तक लागू नहीं किया गया है" के अलावा इसे अस्वीकार क्यों किया जाएगा)। इसके लिए प्रथम श्रेणी के भाषा समर्थन की कमी के आसपास काम करना काफी सरल है:

module Bar { 
    var _qua = 42; 

    declare export var qua: number; 
    Object.defineProperty(Bar, 'qua', { 
     get: function() { return _qua; }, 
     set: function(value) { _qua = value; } 
    }); 
} 

// Works 
var x = Bar.qua; 
console.log(x); 
Bar.qua = 19; 
console.log(Bar.qua); 
+5

अभी भी लागू नहीं किया गया है? – oligofren

+0

@ ryan-cavanaugh इस सुविधा पर कोई अपडेट और यदि इसे कभी भी लागू किया जाएगा? यदि नहीं, तो मुझे सुनना अच्छा लगेगा क्यों! – bnieland

5

एक्सेसर्स केवल "सदस्यों" के लिए हैं। सदस्य केवल कक्षा का हिस्सा हो सकते हैं, कम से कम इस प्रकार टाइपस्क्रिप्ट है।

एक्सेसर्स कक्षा प्रोटोटाइप पर परिभाषित किए गए हैं, जो कि मॉड्यूल के पास नहीं है। यदि आप वास्तव में चाहते हैं, तो आप इसे मैन्युअल रूप से परिभाषित कर सकते हैं, और यह काम करता है।

module MyModule { 
    var view; 
    export var View; 
    Object.defineProperty(MyModule, "View", { 
     get: function() { 
      console.log(1); 
      return view; 
     }, 
     set: function (val) { 
      console.log(2, val); 
      view = val; 
     }, 
     enumerable: true, 
     configurable: true 
    }); 
} 

MyModule.View = 555; 
window["mm"] = MyModule.View; 

जैसी उम्मीद थी, मैं के उत्पादन में मिल गया:

> 2 555 
> 1 

हालांकि मैं ईमानदारी से

0

:) नहीं होता आप स्थिर गुणों के साथ एक वर्ग में लपेट कर सकते हैं:

module MyModule { 
    export class MyClass { 
    private static view; 
    static get View() { return this.view; } 
    static set View(value) { this.view = value } 
    } 
}