এই ব্লগটিতে TypeScript-এর দুটি গুরুত্বপূর্ণ বিষয় নিয়ে সংক্ষেপে আলোচনা করা হয়েছে , কিন্তু কিছু কী ওয়ার্ড ইংলিশ রাখা হয়েছে যাতে বুঝতে সহজ হয়
TypeScript-এ interface এবং type দুটোই ডেটার স্ট্রাকচার ডিফাইন করতে ব্যবহার হয়। কিন্তু কাজ করার সময় এদের সূক্ষ্ম পার্থক্যগুলো জানা জরুরি।
- Interface: একই নামে দুইবার Interface ডিক্লেয়ার করলে TS অটোমেটিক সেগুলোকে জোড়া লাগিয়ে দেয় । লাইব্রেরি ডেভেলপমেন্টে এটা খুব কাজের।
- Type: এটা ফিক্সড। একই নামে দুইবার Type ডিক্লেয়ার করলে এরর খাবেন।
// Interface Merging (Works!)
interface User { name: string; }
interface User { age: number; }
// রেজাল্ট: User-এ এখন name ও age দুটোই আছে।
// Type (Error!)
type Person = { name: string; };
// type Person = { age: number; }; // Duplicate identifier error২. Union এবং Primitive টাইপ
Type: Union (|) বা Intersection (&) তৈরির জন্য type সেরা। এছাড়া সাধারণ string বা number-এর নতুন নাম (Alias) দিতেও type লাগে।
Interface: এটা দিয়ে সরাসরি Union বানানো যায় না। এটি মূলত অবজেক্টের শেপ ডিফাইন করতেই বেশি ব্যবহৃত হয়।
// Union Type
type ID = string | number; // Best use case for Type
// Interface
interface Point { x: number; y: number; } // Good for Objectsবটম লাইন: কোনটা ব্যবহার করবেন?
যদি Object নিয়ে কাজ করেন এবং ভবিষ্যতে প্রপার্টি এক্সটেন্ড করার সুযোগ রাখতে চান—তবে Interface।
যদি Union/Intersection বা ফিক্সড ডেটা টাইপ লাগে—তবে Type।
টাইপস্ক্রিপ্টে টাইপ সেফটি বজায় রাখতে এই তিনটি বিশেষ টাইপের পার্থক্য বোঝা খুব জরুরি।
১. any (সবচেয়ে ঢিলেঢালা) মানে যেকোনো ভ্যালু নিবে
এটি ব্যবহার করা মানে টাইপ চেকিং বন্ধ করে দেওয়া। ভেরিয়েবলে যা খুশি রাখা যায় এবং যা খুশি করা যায়।
সমস্যা: কম্পাইল টাইমে এরর দেবে না, কিন্তু রানটাইমে অ্যাপ ক্র্যাশ করতে পারে।
কখন: খুব ঠেকায় না পড়লে বা JS থেকে মাইগ্রেট করা ছাড়া এটি এড়িয়ে চলাই ভালো।
let data: any = "Hello";
data = 100; // No Error
data.foo(); // No Error at compile time But at runtime! মানে কম্পাইল টাইমে ইরর হবে ।২. unknown (নিরাপদ any)
এটিও যেকোনো ভ্যালু গ্রহণ করে, কিন্তু ব্যবহারের আগে আপনাকে অবশ্যই চেক করে নিতে হবে এর ভেতরে কী আছে। একে বলা যায় "Type-safe any"।
সুবিধা: টাইপ চেক (typeof) না করা পর্যন্ত আপনি কোনো প্রপার্টি এক্সেস করতে পারবেন না।
let input: unknown = "Hello";
// console.log(input.length); // ❌ Error: Object is of type 'unknown'
if (typeof input === 'string') {
console.log(input.length); // Safe now
}৩. never (অসম্ভব কিছু)
never মানে এমন কিছু যা বাস্তবে ঘটা অসম্ভব।
ব্যবহার: এমন ফাংশন যা কখনো রিটার্ন করে না (যেমন Infinite Loop বা Error Throw করা)।
Logic Check: কোডের এমন কোনো অংশ যেখানে লজিক্যালি পৌঁছানো সম্ভব না, সেখানে never ব্যবহার হয়।
// ফাংশনটি কখনো শেষ হবে না, তাই return type 'never'
function throwError(msg: string): never {
throw new Error(msg);
}সারকথা: কোড নিরাপদ রাখতে any বাদ দিয়ে unknown ব্যবহার করুন, আর লজিক্যাল এরর হ্যান্ডলিংয়ের জন্য never সম্পর্কে ধারণা রাখুন। তাতে করে ইরর কম হবে ।