निम्नलिखित टाइपप्रति कोड पर विचार करें:टाइपस्क्रिप्ट मुझे गैर-शून्य assertion ऑपरेटर के अनावश्यक उपयोग के बारे में चेतावनी दे सकता है?
let x = { foo: { bar: "baz" } };
console.log(x.foo!.bar);
यहाँ, x.foo
की अनुमानित प्रकार { bar: string }
है, और इसलिए गैर-शून्य अभिकथन ऑपरेटर !
के उपयोग (देखें उदाहरण के लिए https://github.com/Microsoft/TypeScript/issues/7395) के लिए कोई जरूरत नहीं है: संकलक पहले से ही जानता है कि x.foo
शून्य नहीं हो सकता है।
क्या टीसी (या संभवतः व्यापक रूप से उपयोग किए जाने वाले तीसरे पक्ष के उपकरण जैसे टीएसलिंट) मुझे !
के इन आवश्यक उपयोगों के बारे में चेतावनी दे सकता है, और/या यह एक योजनाबद्ध सुविधा है?
मुझे यकीन है कि इस सिद्धांत में संभव है कर रहा हूँ (जैसे this'd सिर्फ टाइपप्रति संकलक एपीआई का उपयोग स्थानों पर जहां !
चर जिसका प्रकार पर प्रयोग किया जाता है की पहचान करने की बात हो लगता है T | null
या T | undefined
नहीं है); मैं बस सोच रहा हूं कि भारी उठाना पहले ही हो चुका है या नहीं। या, मुझे लगता है कि टाइपस्क्रिप्ट कंपाइलर एपीआई के प्रासंगिक हिस्सों में एक सूचक भी काम करेगा - इसके लिए दस्तावेज ढूंढना मुश्किल है (मुझे लगता है क्योंकि यह अभी तक स्थिर नहीं है)।
(कारण मैं पूछ है कि मैं चिंतित हूं कि मैं कोड से निपटने के लिए होने अंत करने जा रहा हूँ कर रहा हूँ जहाँ मुझे पिछले कुछ बेवकूफ हर जगह !
छिड़का tsc --strictNullChecks
रोक त्रुटियों जारी करने, वास्तव में है कि क्या के बारे में सोच के बिना बनाने के लिए जोरदार चर वास्तव में रनटाइम पर गैर-शून्य हो जाएगा। अगर यह रनटाइम पर शून्य हो जाता है, वॉयला! एक बग जिसे हम संकलित समय पर पकड़े गए थे, लेकिन अतिरंजित !
की वजह से नहीं था। !
की उपस्थिति गैर-शून्य होने के लिए पहले से ज्ञात चर पर यह दृढ़ता से संकेत देता है कि कोड !
पर अधिक गलत तरीके से उपयोग कर रहा है।)
दिलचस्प। मुझे नहीं पता था कि यह ऑपरेटर भी अस्तित्व में था। –
असल में, ऐसा करने से आपको कुछ भी नहीं रोक रहा है: x.foo.bar = null; x.foo = null ;, इस तथ्य के बावजूद कि x का प्रकार {bar: string} है – vintem