2013-02-04 15 views
27

मैं टाइपप्रति में निम्नलिखित श्रेणियां होती हैं:टाइपस्क्रिप्ट में सरणी को प्रारंभ करने, आरंभ करने और पॉप्युलेट करने के लिए कैसे करें?

class bar { 
    length: number; 
} 

class foo { 
    bars: bar[] = new Array(); 
} 

और फिर मैं है:

var ham = new foo(); 
ham.bars = [ 
    new bar() {   // <-- compiler says Expected "]" and Expected ";" 
     length = 1 
    } 
]; 

वहाँ टाइपप्रति में ऐसा करने के लिए कोई तरीका है?

अद्यतन

मैं ही वापस जाने के लिए एक सेट विधि होने से एक और समाधान के साथ आया था:

class bar { 
    length: number; 

    private ht: number; 
    height(h: number): bar { 
     this.ht = h; return this; 
    } 

    constructor(len: number) { 
     this.length = len; 
    } 
} 

class foo { 
    bars: bar[] = new Array(); 
    setBars(items: bar[]) { 
     this.bars = items; 
     return this; 
    } 
} 

ताकि आप इसे नीचे के रूप में प्रारंभ कर सकते हैं:

var ham = new foo(); 
ham.setBars(
    [ 
     new bar(1).height(2), 
     new bar(3) 
    ]); 
+0

सी # के समान टाइपस्क्रिप्ट में ऑब्जेक्ट प्रारंभकर्ता होने के लिए वास्तव में उपयोगी होगा। '[{लंबाई: 1}]' बार का उदाहरण नहीं है लेकिन अगर समर्थित है, तो 'नया बार() {length = 1}' बार का उदाहरण होगा। शायद हमें इसके लिए एक फीचर सुझाव देना चाहिए? – orad

उत्तर

30

वहाँ isn जावास्क्रिप्ट या टाइपस्क्रिप्ट में ऑब्जेक्ट्स के लिए फ़ील्ड प्रारंभिक वाक्यविन्यास नहीं है।

विकल्प 1:

class bar { 
    // Makes a public field called 'length' 
    constructor(public length: number) { } 
} 

bars = [ new bar(1) ]; 

विकल्प 2:

interface bar { 
    length: number; 
} 

bars = [ {length: 1} ]; 
+3

चीजों को स्पष्ट और टाइपएफ़ बनाने के लिए: 'सलाखों: बार [] = [{लंबाई: 1}] ' – Patrice

+0

कक्षाओं को परिभाषित किए बिना ऐसा करने का कोई तरीका है? – blackiii

+0

सवाल यह है कि कक्षा में किसी सरणी को कैसे प्रारंभ किया जाए। कक्षाओं के बिना कक्षा में एक सरणी शुरू करने का कोई तरीका नहीं है। समस्या लिंक के लिए –

14

तुम सच में नामित पैरामीटर साथ ही आपके वस्तुओं अपने वर्ग के उदाहरण हो करना चाहते हैं, तो आप निम्न कर सकते हैं:

class bar { 
    constructor (options?: {length: number; height: number;}) { 
     if (options) { 
      this.length = options.length; 
      this.height = options.height; 
     } 
    } 
    length: number; 
    height: number; 
} 

class foo { 
    bars: bar[] = new Array(); 
} 

var ham = new foo(); 
ham.bars = [ 
    new bar({length: 4, height: 2}), 
    new bar({length: 1, height: 3}) 
]; 

here टाइपस्क्रिप्ट समस्या ट्रैकर पर संबंधित आइटम भी है।

+0

+1। आप प्रारंभकर्ता मान वैकल्पिक भी बना सकते हैं: 'विकल्प? : {लंबाई ?: संख्या; ऊंचाई ?: संख्या;} ' –

संबंधित मुद्दे