मैंने <If />
रिएक्ट का उपयोग करते हुए एक साधारण फ़ंक्शन घटक बनाया :
import React, { ReactElement } from "react";
interface Props {
condition: boolean;
comment?: any;
}
export function If(props: React.PropsWithChildren<Props>): ReactElement | null {
if (props.condition) {
return <>{props.children}</>;
}
return null;
}
यह मुझे एक क्लीनर कोड लिखने देता है, जैसे:
render() {
...
<If condition={truthy}>
presnet if truthy
</If>
...
ज्यादातर मामलों में, यह अच्छा काम करता है, लेकिन जब मैं उदाहरण के लिए जांच करना चाहता हूं कि क्या किसी दिए गए चर को परिभाषित नहीं किया गया है और फिर इसे संपत्ति के रूप में पारित किया जाता है, तो यह एक मुद्दा बन जाता है। मैं एक उदाहरण दूंगा:
मान लीजिए कि मेरे पास एक घटक है जिसे <Animal />
निम्नलिखित प्रॉप्स कहते हैं:
interface AnimalProps {
animal: Animal;
}
और अब मेरे पास एक और घटक है जो निम्नलिखित DOM को प्रस्तुत करता है:
const animal: Animal | undefined = ...;
return (
<If condition={animal !== undefined} comment="if animal is defined, then present it">
<Animal animal={animal} /> // <-- Error! expected Animal, but got Animal | undefined
</If>
);
जैसा कि मैंने टिप्पणी की है, वास्तव में पशु को परिभाषित नहीं किया गया है, मुझे टाइपस्क्रिप्ट को बताने का कोई तरीका नहीं मिला है कि मैंने इसे पहले ही जांच लिया है। animal!
काम करने का आश्वासन दिया जाएगा, लेकिन यह वह नहीं है जिसकी मुझे तलाश है।
कोई विचार?
<Animal animal={animal as Animal} />
{animal !== undefined && <Anibal animal={animal} />}
काम करेगा