2017-10-11 48 views
6

मेरे पास जावास्क्रिप्ट में लिखा गया एक बाहरी एसडीके है जिसका मैं उपयोग कर रहा हूं। इन मॉड्यूल में से एक, Blob नया सक्षम है, लेकिन यह भी एक enum FooEnum (सदस्यों Bar और Baz) का खुलासा करता है।टाइपस्क्रिप्ट नया और enum संदर्भ

जावास्क्रिप्ट में इस SDK का उपयोग करने के लिए कोड तो की तरह है:

const blobInstance = new Sdk.Blob(); 
const fooType = Sdk.Blob.FooEnum.Baz; 

मैं अब एक अंतरफलक है कि मैं आदेश मुझे कुछ प्रकार सुरक्षा देने के लिए करने के लिए इस एसडीके डाल सकता लिखने की कोशिश कर रहा हूँ।

interface BlobInterface { } 

enum Foo { 
    Bar, 
    Baz 
} 

interface Sdk { 
    Blob: { 
     new(): BlobInterface; 
     FooEnum: Foo; 
    } 
} 

मेरे समस्या है, तथापि, जब मैं संदर्भ Blob.FooEnum, यह सोचता है कि कि FooEnum ही वास्तव में enum Foo का एक सदस्य है है (यानी यह मानना ​​है कि यह Bar है: यहाँ मैं अब तक क्या मिल गया है है या Baz) और इसलिए, मुझे Baz इससे प्राप्त नहीं होने देता है।

मैं टाइपस्क्रिप्ट को कैसे बता सकता हूं कि Blob.FooEnum वास्तव में enum को इंगित करता है और enum का सदस्य नहीं है?

उत्तर

3

Foo दोनों मूल्य का नाम और एक प्रकार का नाम है। एक मूल्य के रूप में, यह वस्तु जिसका गुण होते हैं कुंजी Bar और Baz और जिनके मान क्रमशः 0 और 1, कर रहे हैं का प्रतिनिधित्व करता है (यह भी कुंजी 0 और 1 जिनके मान "Bar" और "Baz" क्रमशः के साथ गुण है।)। एक प्रकार के रूप में, यह Foo.Bar और Foo.Baz के प्रकारों के संघ का प्रतिनिधित्व करता है। ये समान नहीं हैं: मान FooFoo प्रकार का नहीं है।

यह कक्षा (जैसे, class Bar {}) की तरह है, जहां मूल्य Bar वर्ग निर्माता का प्रतिनिधित्व करता है, और प्रकार Bar कक्षा के उदाहरण के प्रकार का प्रतिनिधित्व करता है। फिर, मान BarBar प्रकार का नहीं है।

दोनों ही मामलों में, आप प्रकार का नाम Foo या Bar साथ मान के संगत चाहते हैं तो आपको typeof मूल्य के साथ उपयोग करें:

interface Sdk { 
    Blob: { 
     FooEnum: typeof Foo; 
    } 
} 

अब FooEnum वस्तु Foo के रूप में एक ही प्रकार है, और यह आपके लिए काम करना चाहिए।

शुभकामनाएं!

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