2016-09-30 19 views
17

में एनम्स की तुलना कैसे करें टाइपस्क्रिप्ट में, मैं enum मान वाले दो चर की तुलना करना चाहता हूं। यहाँ मेरी कम से कम कोड उदाहरण है:टाइपस्क्रिप्ट

enum E { 
    A, 
    B 
} 

let e1: E = E.A 
let e2: E = E.B 

if (e1 === e2) { 
    console.log("equal") 
} 

जब साथ tsc (v 2.0.3) मैं निम्नलिखित त्रुटि मिलती है संकलन: ==, !== और != साथ

TS2365: Operator '===' cannot be applied to types 'E.A' and 'E.B'.

ही। मैंने const कीवर्ड जोड़ने का प्रयास किया लेकिन ऐसा कोई प्रभाव नहीं पड़ता है।

4.19.3 The <, >, <=, >=, ==, !=, ===, and !== operators

These operators require one or both of the operand types to be assignable to the other. The result is always of the Boolean primitive type.

कौन सा (मुझे लगता है कि) त्रुटि बताते हैं: TypeScript spec निम्नलिखित कहते हैं। लेकिन मैं इसे कैसे प्राप्त कर सकता हूं?

साइड नोट
मैं atom-typescript साथ एटम संपादक का उपयोग कर रहा हूँ, और मैं अपने संपादक में किसी भी त्रुटि/चेतावनी नहीं मिलता है। लेकिन जब मैं उसी निर्देशिका में tsc चलाता हूं तो मुझे उपरोक्त त्रुटि मिलती है। मैंने सोचा कि उन्हें उसी tsconfig.json फ़ाइल का उपयोग करना था, लेकिन स्पष्ट रूप से यह मामला नहीं है।

उत्तर

7

वहाँ एक और तरीका है:

let e1: E = E.A 
let e2: E = E.B 


if (e1 as E === e2 as E) { 
    console.log("equal") 
} 

सामान्य में, इस पर नियंत्रण के प्रवाह आधारित प्रकार के कारण होता है: यदि आप जावास्क्रिप्ट कोड उत्पन्न नहीं चाहते किसी भी तरह से प्रभावित होने की, तो आप प्रकार डाली उपयोग कर सकते हैं अनुमान। वर्तमान टाइपप्रति कार्यान्वयन के साथ, यह बंद है जब भी समारोह कॉल शामिल है, तो आप भी ऐसा कर सकते हैं:

let id = a => a 

let e1: E = id(E.A) 
let e2: E = id(E.B) 

if (e1 === e2) { 
    console.log('equal'); 
} 

अजीब बात वहाँ अभी भी कोई त्रुटि है id समारोह ठीक एक ही प्रकार के वापस जाने के लिए घोषित किया गया है, है इसके agument के रूप में:

if (E[e1] === E[e2]) { 
    console.log("equal") 
} 

यह टी तुलना:

function id<T>(t: T): T { return t; } 
5

खैर मुझे लगता है मैं कुछ है कि काम करता है पाया लगता है:

if (e1.valueOf() === e2.valueOf()) { 
    console.log("equal") 
} 

लेकिन मैं थोड़ा हैरान हूँ कि इस दस्तावेज़ में कहीं भी उल्लेख नहीं है हूँ।

+1

वह मेरे लिए काम नहीं करता जा रहा है के साथ इस

if (product.ProductType && (product.ProductType.toString() == ProductTypes[ProductTypes.Merchandises])) { // yes this item is of merchandises } 

के साथ दो enums तुलना करने में सक्षम था। मुझे एक अपरिभाषित हो रहा है – dave0688

1

केवल बात यह है कि (टाइपप्रति 2.2.1 में) मेरे लिए काम किया यह था वह नामों का प्रतिनिधित्व करता है (उदाहरण के लिए। "ए" और "बी")।

0

तो ProductTypes इस export enum ProductTypes{Merchandises,Goods,...}