React के साथ टाइपस्क्रिप्ट का उपयोग करते हुए अब हमें React.Props
यह जानने के लिए संकलक के लिए विस्तार करना होगा कि सभी प्रतिक्रिया घटक प्रॉप्स में बच्चे हो सकते हैं:
interface MyProps { }
class MyComponent extends React.Component<MyProps, {}> {
public render(): JSX.Element {
return <div>{this.props.children}</div>;
}
}
हालाँकि, यह स्टेटलेस फंक्शनल कंपोनेंट्स के मामले में नहीं लगता है:
const MyStatelessComponent = (props: MyProps) => {
return (
<div>{props.children}</div>
);
};
संकलित त्रुटि का उत्सर्जन करता है:
त्रुटि: (102, 17) TS2339: संपत्ति 'बच्चे' प्रकार 'MyProps' पर मौजूद नहीं है।
मुझे लगता है कि यह इसलिए है क्योंकि कंपाइलर को यह जानने का कोई तरीका नहीं है कि children
प्रॉम्प्स तर्क में एक वेनिला फंक्शन दिया जाएगा ।
तो सवाल यह है कि हमें टाइपस्क्रिप्ट में एक सांख्यिकीय कार्यात्मक घटक में बच्चों का उपयोग कैसे करना चाहिए?
मैं पुराने तरीके से वापस जा सकता हूं MyProps extends React.Props
, लेकिन Props
इंटरफ़ेस को पदावनत के रूप में चिह्नित किया गया है , और स्टेटलेस घटकों के पास नहीं है या Props.ref
जैसा कि मैं समझता हूं कि यह समर्थन नहीं करता है।
तो मैं children
मैन्युअल रूप से परिभाषित कर सकता है :
interface MyProps {
children?: React.ReactNode;
}
पहला: ReactNode
सही प्रकार है?
दूसरा: मैं वैकल्पिक के रूप में बच्चों को लिखने के लिए है ( ?
) या फिर उपभोक्ताओं है कि लगता है कि होगा children
एक माना जाता है विशेषता घटक (के <MyStatelessComponent children={} />
), और अगर एक मूल्य के साथ प्रदान की नहीं एक त्रुटि बढ़ा।
ऐसा लगता है जैसे मुझे कुछ याद आ रहा है। क्या कोई इस पर कुछ स्पष्टता प्रदान कर सकता है कि क्या मेरा अंतिम उदाहरण बच्चों के साथ प्रतिक्रियाशील कार्यात्मक घटकों का उपयोग करने का तरीका है?
@types