वर्तमान में मैं लीगेसी जेएस/रिएक्ट एप्लिकेशन पर काम/रखरखाव कर रहा हूं, जहां टाइपस्क्रिप्ट पर दोबारा काम करने का कोई विकल्प नहीं है, इसलिए मैं जेएस के लिए मौजूदा विकास समय प्रकार प्रणाली के रूप में जेएसडॉक को चालू कर रहा हूं।
टाइपस्क्रिप्ट एनपीएम मॉड्यूल jsDoc द्वारा बनाया गया है, यूज़डक 70LOC के तहत रिडक्स के स्वर्ण युग को वापस लाता है। यह मॉड्यूल विकास के समय में मुख्य उपयोग का मामला है, जब आपकी जटिल स्थिति को सुरक्षित रहने में मदद मिलती है।
const [state, quack] = useDuck(reducer, initialState, actionsMap);
जेएसडॉक-डक
टाइपस्क्रिप्ट के साथ मेरा अनुभव थोड़ा और गहरा हो गया जब मैंने एक हल्की प्रतिक्रिया स्थिति एनपीएम लाइब्रेरी बनाई: प्रतिक्रिया-राज्य-फैक्टरी
User declared state and actions types -> useStateFactory -> [state, dispatchedActoionCollection]
अपने कार्यों में मदद के लिए कुछ jsDoc एनोटेशन का उपयोग शुरू करने के बाद, अगला चरण थोड़ा अधिक महत्वाकांक्षी है: इस मॉड्यूल को jsDoc पर फिर से काम करना। पहली नजर में यह एक असंभव मिशन है. लेकिन jsDoc को समझने में कुछ सप्ताह बिताने के बाद मुझे ट्यूनल के अंत में कुछ रोशनी दिखाई दी।
एक निश्चित बिंदु के तहत मुझे jsDoc क्षमता की एक कठिन सीमा मिली, जब मैं एक रेड्यूसर फ़ंक्शन लिखने का प्रयास करता हूं, जहां परिणाम एक क्वैक है लेकिन निश्चित रूप से यह एक खाली {} शुरू कर रहा है। तो केवल रेड्यूसर रन के अंत ने उचित क्वैक बनाया क्योंकि उस प्रकार की वस्तु के बारे में उत्सुकता है जिसमें सभी अनुरोधित कुंजी शामिल हैं। इसलिए यह समस्या अब तक मैं हल नहीं कर सका, यदि कोई कोई अच्छा विचार दे सकता है कि मैं इसे कैसे हल कर सकता हूं तो कृपया मेरे साथ साझा करें या सहयोगी के रूप में इस मॉड्यूल विकास में शामिल हों।
शुरुआत में मैं एक एकल js फ़ाइल बनाता हूं जिसमें सभी आवश्यक jsDoc @typedef शामिल होते हैं, देर-सबेर यह काम करेगा। और वह क्षण मुझे लगता है कि उनके लिए नोड मॉड्यूल बनाने का सिर्फ एक कदम है।
लेकिन दुखद तथ्य यह है कि एनपीएम मॉड्यूल पर, जिसमें निर्यातित प्रकार शामिल हैं, केवल जेएसडॉक के साथ काम नहीं कर रहे हैं, इसलिए डी.टीएस को संकलित करना अनिवार्य है, इसलिए अंत में जेएसडॉक मॉड्यूल 100% जेएस न कहें, इसके बजाय बिल्ड टाइपस्क्रिप्ट का भी उपयोग करें।
जैसा कि आप dev.to फोरम में पहचानते हैं, सिंटैक्स हाइलाइट jsDoc को नहीं पहचानता है। मेरे परीक्षण में अन्य गलत चीजें यह @typedef केवल तभी काम करती है जब आप एक पंक्ति लिखते हैं, इसलिए यह स्वच्छ कोड के विरुद्ध जा रहा है।
अपने अगले ब्लॉगपोस्ट में मैं इस लाइब्रेरी का ठोस उपयोग-केस लिखूंगा, सॉर्ट करें: यूज़रेड्यूसर के साथ रिएक्ट स्टेट हैंडलिंग को सरल बनाएं और सुरक्षित करें।
/** * @template T - Payload Type * @typedef {T extends { type: infer U, payload?: infer P } ? { type: U, payload?: P } : never} ActionType */ // @ts-ignore /** @template AM - Actions Map @typedef {{ [K in AM['type']]: K }} Labels */ // @ts-ignore /** @template AM - Actions Map @typedef {{ [T in AM["type"]]: Extractextends { payload: infer P } ? (payload: P) => void : () => void }} Quack */ /** * @template ST - State * @template AM - Actions Map * @typedef {(state: ST, action: AM) => ST} Reducer */
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3