আমি <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;
}
এবং এখন আমার কাছে আরও একটি উপাদান রয়েছে যা নিম্নলিখিত ডোমকে রেন্ডার করে:
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!কাজ করার জন্য দৃser়তার দাবি , তবে এটি আমি খুঁজছি না।
কোন ধারনা?
<Animal animal={animal as Animal} />
{animal !== undefined && <Anibal animal={animal} />}কাজ করবে