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
অথবা AdminUser
। in
গার্ড দিয়ে চেক করা হয়েছে 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
ক্লাস আছে এবং Dog
ও Cat
ক্লাস তার সাবক্লাস। instanceof
দিয়ে চেক করছি animal
আসলে কোন সাবক্লাসের অবজেক্ট।
📌 ব্যবহারের সময়: যখন ক্লাস ভিত্তিক অবজেক্টের ইনস্ট্যান্স যাচাই করতে হয়।
🧩 ব্যবহারের প্রয়োজনীয়তা
কারণ | ব্যাখ্যা |
---|---|
🔍 টাইপ চেক করতে | যদি ভেরিয়েবল একাধিক টাইপের হয়, তবে নিশ্চিতভাবে চেক করতে হয় কোন টাইপটি ব্যবহৃত হচ্ছে |
🛡️ টাইপ সেফটি বাড়াতে | ভুল টাইপে অপারেশন করলে টাইপস্ক্রিপ্টে এরর হয় না, কিন্তু রানটাইমে সমস্যা হতে পারে |
⚙️ ভিন্ন টাইপ অনুযায়ী লজিক প্রয়োগ করতে | বিভিন্ন টাইপ অনুযায়ী ভিন্নভাবে আচরণ করাতে সাহায্য করে |
✅ রানটাইম এরর কমায় | টাইপ ঠিকভাবে হ্যান্ডেল করলে অ্যাপ ক্র্যাশের সম্ভাবনা কমে |
🧾 সংক্ষেপে
টাইপ গার্ড | কখন ব্যবহার হয় | কী চেক করে |
---|---|---|
typeof | প্রিমিটিভ টাইপ (string, number ইত্যাদি) | টাইপ নাম ("string" , "number" ) |
in | অবজেক্টে নির্দিষ্ট প্রপার্টি আছে কিনা | প্রপার্টি নাম ("role" in user ) |
instanceof | ক্লাস ভিত্তিক ইনস্ট্যান্স যাচাই | সাবক্লাস ইনস্ট্যান্স কিনা |