Skip to Content

Typeguards

🛡️ টাইপ গার্ড (Type Guards) কী?

Type Guards হলো TypeScript-এর একটি কৌশল, যা ইউনিয়ন টাইপ (|) ব্যবহার করা হলে ভিতরে কন্ডিশন ব্যবহার করে নির্দিষ্ট টাইপ শনাক্ত করতে সাহায্য করে। এটি কোডকে নিরাপদ, নির্ভুল এবং টাইপ অনুযায়ী আচরণ নিশ্চিত করে।

✨ টাইপ গার্ডের ধরনসমূহ

1️⃣ typeof গার্ড (প্রিমিটিভ টাইপ চেক করার জন্য)

// type guard with typeof type ADD = string | number; const Add = (param1: ADD, param2: ADD): ADD => { if (typeof param1 === "number" && typeof param2 === "number") { return param1 + param2; } else { return param1.toString() + param2.toString(); } }; const res1 = Add(2, 3); const res2 = Add("5", "5"); console.log(res1, res2);

🔍 এখানে param1 এবং param2 এর টাইপ string | number। আমরা typeof ব্যবহার করে চেক করেছি তারা number কিনা।

📌 যদি হয়, তাহলে যোগফল করব। যদি না হয়, তাহলে স্ট্রিং কনক্যাট করব।

📌 ব্যবহারের সময়: যখন প্রিমিটিভ টাইপ যেমন string, number, boolean চেক করতে হবে।


2️⃣ in গার্ড (অবজেক্ট টাইপের ক্ষেত্রে প্রপার্টি চেক করার জন্য)

// in guard type NormalUser = { name: string; }; type AdminUser = { name: string; role: "admin"; }; const getUser = (user: NormalUser | AdminUser) => { if ("role" in user) { // এখন আমরা admin টাইপের প্রপার্টি অ্যাক্সেস করতে পারি console.log(`I am ${user.name} & My role is ${user.role}`); } else { console.log(`I am ${user.name}`); } }; const normalUser: NormalUser = { name: "I am a NormalUser", }; const adminUser: AdminUser = { name: "I am an Admin", role: "admin", }; getUser(normalUser); getUser(adminUser);

🔍 এখানে user টাইপ হতে পারে NormalUser অথবা AdminUserin গার্ড দিয়ে চেক করা হয়েছে role নামের প্রপার্টি আছে কিনা।

📌 যদি থাকে তাহলে সেটা AdminUser

📌 ব্যবহারের সময়: যখন অবজেক্টে নির্দিষ্ট প্রপার্টি আছে কিনা চেক করতে চাই।


3️⃣ instanceof গার্ড (ক্লাস ভিত্তিক টাইপ চেক করার জন্য)

class Animal { makeSound() { console.log("Animal sound"); } } class Dog extends Animal { makeBark() { console.log("Bark!"); } } class Cat extends Animal { makeMeaw() { console.log("Meaw!"); } } const isDog = (animal: Animal): animal is Dog => { return animal instanceof Dog; }; const isCat = (animal: Animal): animal is Cat => { return animal instanceof Cat; }; const getAnimal = (animal: Animal) => { if (isDog(animal)) { animal.makeBark(); } else if (isCat(animal)) { animal.makeMeaw(); } else { animal.makeSound(); } };

🔍 এখানে Animal ক্লাস আছে এবং DogCat ক্লাস তার সাবক্লাস। instanceof দিয়ে চেক করছি animal আসলে কোন সাবক্লাসের অবজেক্ট।

📌 ব্যবহারের সময়: যখন ক্লাস ভিত্তিক অবজেক্টের ইনস্ট্যান্স যাচাই করতে হয়।


🧩 ব্যবহারের প্রয়োজনীয়তা

কারণব্যাখ্যা
🔍 টাইপ চেক করতেযদি ভেরিয়েবল একাধিক টাইপের হয়, তবে নিশ্চিতভাবে চেক করতে হয় কোন টাইপটি ব্যবহৃত হচ্ছে
🛡️ টাইপ সেফটি বাড়াতেভুল টাইপে অপারেশন করলে টাইপস্ক্রিপ্টে এরর হয় না, কিন্তু রানটাইমে সমস্যা হতে পারে
⚙️ ভিন্ন টাইপ অনুযায়ী লজিক প্রয়োগ করতেবিভিন্ন টাইপ অনুযায়ী ভিন্নভাবে আচরণ করাতে সাহায্য করে
✅ রানটাইম এরর কমায়টাইপ ঠিকভাবে হ্যান্ডেল করলে অ্যাপ ক্র্যাশের সম্ভাবনা কমে

🧾 সংক্ষেপে

টাইপ গার্ডকখন ব্যবহার হয়কী চেক করে
typeofপ্রিমিটিভ টাইপ (string, number ইত্যাদি)টাইপ নাম ("string", "number")
inঅবজেক্টে নির্দিষ্ট প্রপার্টি আছে কিনাপ্রপার্টি নাম ("role" in user)
instanceofক্লাস ভিত্তিক ইনস্ট্যান্স যাচাইসাবক্লাস ইনস্ট্যান্স কিনা
Last updated on