2016-12-15 2 views
7

निम्नलिखित कोड टाइपप्रति में कानूनी है:क्या टाइपस्क्रिप्ट में केवल बूलियन स्वीकार करने के लिए "if" को मजबूर करने का कोई तरीका है?

let asyncCondition = async(): Promise<boolean> => // .. calculate & return a boolean 
if(asyncCondition()){ // forgot to await. condition is always true 
    // .. do stuff 
} 

asyncCondition() के बाद से रिटर्न एक सामान्य नहीं-अशक्त Promise, if ब्लॉक में कोड हमेशा मार डाला जाएगा। यह जावास्क्रिप्ट व्यवहार है और यह समझ में आता है कि टाइपस्क्रिप्ट शिकायत नहीं करता है।

लेकिन उपरोक्त परिदृश्य में, क्या मैं वास्तव में मतलब है:

let asyncCondition = async(): Promise<boolean> => // .. calculate & return a boolean 
if(await asyncCondition()){ // condition is asyncCondition() 
    // .. do stuff 
} 

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

+0

शायद यह आपकी स्थिति में बूलियन के खिलाफ जांच करने की आदत है, उदाहरण के लिए: अगर (asyncCondition() === सच है { –

उत्तर

3

कंपाइलर ऐसा नहीं करता है और मैं जल्द ही इसे किसी भी समय ऐसा करने की उम्मीद नहीं करूंगा। यह कई बार पूछा और खारिज कर दिया गया है। मामलों मैं मिल सकता है:

प्रत्येक मामलों में, संकलक बदले बिना इन मुद्दों को बंद करने के लिए तर्क यह था कि यह बहुत ही क्रांतिकारी बदलाव होगा, और वास्तव में एक लिटर को यह काम करना चाहिए।

अच्छी खबर यह है कि इस समस्या के बारे में चेतावनियां प्रदान करने के लिए हाल ही में एक नया नियम merged into tslint's codebase रहा है। जहां तक ​​मैं कह सकता हूं, नियम अभी तक tslint के रिलीज़ संस्करण में नहीं है। एक बार इसे रिलीज़ होने के बाद, यदि आप अपने tslint नियमों में strict-boolean-expressions से true सेट करते हैं, तो tslint आपको चेतावनी देगा जब आप एक अभिव्यक्ति के साथ सशर्त उपयोग करते हैं जो कड़ाई से बूलियन नहीं है।

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

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