TypeScript-এ ডেটা স্ট্রাকচার ডিফাইন করার জন্য interface এবং type উভয়ই ব্যবহৃত হয়, তবে এদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।
- এক্সটেনশন:
extendsএবংimplementsকীওয়ার্ড সাপোর্ট করে। - ডিক্লারেশন মার্জিং (Declaration Merging): একই নামের একাধিক
interfaceডিক্লেয়ার করলে তারা অটোম্যাটিকভাবে merge হয়ে যায়। - ব্যবহার: মূলত Object-এর structure ডিফাইন করতে ব্যবহৃত হয়।
- এক্সটেনশন:
extendsসাপোর্ট করে না, কিন্তু&(Intersection Type) ব্যবহার করে একটি টাইপের সাথে অন্য একটি টাইপকে যুক্ত করা যায়। - ডিক্লারেশন মার্জিং: কাজ করে না। একই নামের একাধিক
typeডিক্লেয়ার করলে Error দেবে। - ব্যবহার: Union Type, Tuple, Primitive Type সহ সব রকম Type বানাতে ব্যবহৃত হয়।
// Interface - Declaration Merging ✅
interface User {
name: string;
}
interface User {
age: number;
}
// এখন 'User' interface-এ 'name' এবং 'age' উভয়ই আছে।
// Type - No Merging ❌
type Person = {
name: string;
};
// Error: Duplicate identifier 'Person'
// type Person = {
// age: number;
// };২. keyof Keyword-এর ব্যবহার কী?
keyof হলো TypeScript-এর একটি অপারেটর যা একটি Object Type-এর সব Keys-এর Union Type রিটার্ন করে। এটি Type Safety নিশ্চিত করতে এবং স্ট্রিং লিটারেল ভুল এড়াতে ব্যবহৃত হয়।
🔑 ব্যবহার keyof ব্যবহার করে এমন একটি ফাংশন তৈরি করা যায়, যা নিশ্চিত করে যে আপনি কেবল Object-এর মধ্যে থাকা Keys দিয়েই ডেটা অ্যাক্সেস করছেন।
💡 উদাহরণ TypeScript
type User = {
id: number;
name: string;
email: string;
};
// UserKeys হলো "id" | "name" | "email"
type UserKeys = keyof User;
// ফাংশনটি নিশ্চিত করে যে 'key' প্যারামিটারটি কেবল 'User' Type-এর Keys-এর মধ্যে থাকবে।
function getValue<T>(obj: T, key: keyof T): T[keyof T] {
return obj[key];
}
const user: User = {
id: 1,
name: "John",
email: "john@example.com"
};
console.log(getValue(user, "name")); // ✅ Valid (Compile Time-এ পাস)
// console.log(getValue(user, "age"));
// Error: Argument of type '"age"' is not assignable to parameter of type 'keyof User'.
// (Compile Time-এ ধরা পড়ে)
ব্যবহারের সুবিধা Compile Time Error: ভুল Key ব্যবহার করলে Compile Time-এই Error ধরা পড়ে।
Runtime Safety: এর ফলে Runtime Error হওয়ার সম্ভাবনা কমে যায়।