2015-06-15 11 views
12

में डायनामिक ऑब्जेक्ट्स कैसे करें टाइपस्क्रिप्ट में गतिशील ऑब्जेक्ट प्रकार को परिभाषित करने का कोई तरीका है? निम्नलिखित उदाहरण में, मैं यह कहकर "माई कॉम्प्लेक्स टाइप" के लिए एक प्रकार को परिभाषित करना चाहता हूं:टाइपस्क्रिप्ट

"माई कॉम्प्लेक्स टाइप" प्रकार के ऑब्जेक्ट्स में "गुणों की संख्या" है, लेकिन उन गुणों के मान आवश्यक हैं प्रकार IValue का हो।

// value interface 
interface IValue { 
    prop:string 
} 

// My Complex Type 
myType = { 
    field1:IValue 
    field2:IValue 
    . 
    . 
    . 
    fieldN:IValue 
} 

// Using My Complex Type 

interface SomeType { 
    prop:My Complex Type 
} 
+1

क्या आप ऐसी ऑब्जेक्ट नहीं बना सकते हैं जिसमें 'string-> IValue' का नक्शा है? –

उत्तर

34

हां, इस प्रकार का व्यवहार हासिल किया जा सकता है, लेकिन थोड़ा अलग तरीके से। तुम बस, टाइपप्रति इंटरफ़ेस का उपयोग करने की जरूरत है की तरह:

interface IValue { 
    prop: string 
} 

interface MyType { 
    [name: string]: IValue; 
} 

ऐसे ही उदाहरण के लिए उपयोग किया जाएगा:

var t: MyType = {}; 
t['field1'] = { prop: null }; 
t['field2'] = new DifferentType(); // compile-time error 
... 
var val = t['field1']; 
val.prop = 'my prop value'; 

आप टाइपप्रति वर्ग बनाने के लिए नहीं है, सब कुछ आप की जरूरत है एक नियमित रूप जावास्क्रिप्ट वस्तु है (उस मामले में {}) और इसे इंटरफ़ेस माईटाइप को कार्यान्वित करें, इसलिए यह शब्दकोश की तरह व्यवहार करता है और आपको संकलन-समय प्रकार की सुरक्षा प्रदान करता है।

+2

** धन्यवाद ** आपने मुझे टाइपस्क्रिप्ट में काम करने वाले रेडक्स-फॉर्म को प्राप्त करने की कोशिश कर इतनी पीड़ा और दुःख बचाया है! – hsrob