मैं वर्तमान में टाइपस्क्रिप्ट के लिए एक रिएक्ट एप्लिकेशन को माइग्रेट कर रहा हूं। अब तक, यह बहुत अच्छी तरह से काम करता है, लेकिन मुझे renderअपने फ़ंक्शन घटकों के क्रमशः मेरे कार्यों के रिटर्न प्रकारों के साथ एक समस्या है ।
अब तक, मैंने हमेशा JSX.Elementरिटर्न टाइप के रूप में उपयोग किया था , अब यह किसी भी अधिक काम नहीं करता है यदि कोई घटक किसी भी चीज़ को रेंडर नहीं करने का निर्णय लेता है , यानी रिटर्न null, क्योंकि nullकोई मान्य मूल्य नहीं है JSX.Element। यह मेरी यात्रा की शुरुआत थी, क्योंकि अब मैंने वेब खोजा और पाया कि आपको ReactNodeइसके बजाय उपयोग करना चाहिए , जिसमें nullकुछ और चीजें भी शामिल हैं जो हो सकती हैं। यह बेहतर दांव लग रहा था।
हालाँकि, अब एक फंक्शन कंपोनेंट बनाते समय टाइपस्क्रिप्ट ReactNodeटाइप के बारे में शिकायत करता है । फिर, कुछ खोज के बाद, मैंने पाया कि फ़ंक्शन घटकों के लिए आपको ReactElementइसके बजाय उपयोग करना चाहिए । हालाँकि, यदि मैं ऐसा करता हूं, तो संगतता समस्या दूर हो जाती है, लेकिन अब टाइपस्क्रिप्ट पुनः nullवैध मूल्य नहीं होने के बारे में शिकायत करता है।
इसलिए, एक लंबी कहानी को छोटा करने के लिए, मेरे पास तीन प्रश्न हैं:
- और
JSX.Element, के बीच अंतर क्या है ?ReactNodeReactElement - क्यों
renderवर्ग घटकों के तरीकों वापसीReactNode, लेकिन समारोह घटकों वापसीReactElement? - मैं इसे सम्मान के साथ कैसे हल करूं
null?
class Example extends Component<ExampleProps> {कक्षाओं के लिए औरconst Example: FunctionComponent<ExampleProps> = (props) => {फ़ंक्शन घटकों के लिए कुछ ऐसा दिखना चाहिए (जहांExamplePropsअपेक्षित सहारा के लिए एक इंटरफ़ेस है)। और फिर इन प्रकारों में पर्याप्त जानकारी है कि वापसी प्रकार का अनुमान लगाया जा सकता है।