2013-02-12 37 views
17

में किसी वर्ग में एक इंडेक्सर को कार्यान्वित करना क्या वर्तमान में टाइपस्क्रिप्ट में किसी वर्ग पर इंडेक्सर लागू करना संभव है?टाइपस्क्रिप्ट

class MyCollection { 
    [name: string]: MyType;  
} 

यह संकलित नहीं करता है। मैं निश्चित रूप से एक इंटरफेस पर एक इंडेक्सर निर्दिष्ट कर सकता हूं, लेकिन मुझे इस प्रकार के साथ-साथ इंडेक्सर पर विधियों की आवश्यकता है, इसलिए एक इंटरफ़ेस पर्याप्त नहीं होगा।

धन्यवाद।

+1

नहीं: http://typescript.codeplex.com/discussions/398379 और http://stackoverflow.com/questions/14791550/how-to-implement-array-ignature-method-in-typescript देखें और देखें – MiMo

उत्तर

23

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

class MyType { 
    constructor(public someVal: string) { 

    } 
} 

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

var collection: MyCollection = {}; 

collection['First'] = new MyType('Val'); 
collection['Second'] = new MyType('Another'); 

var a = collection['First']; 

alert(a.someVal); 
5

यह एक पुरानी सवाल है, के लिए जो जवाब की तलाश में है: अब यह संभव है एक अनुक्रमित संपत्ति को परिभाषित करने के जैसे:

var lookup : {[key:string]:AnyType};

कुंजी के हस्ताक्षर या तो स्ट्रिंग या पूर्णांक होना चाहिए देखें:

Interfaces on www.typescriptlang.org