মূল কন্টেন্টে যান
মডিউল 2 · 1-এর পাঠ 2কোর্সে 3/14~12 min
মডিউল পাঠ (1/2)

উপনাম বনাম ইন্টারফেস টাইপ করুন

TypeScript-এ, আমরা দুটি প্রাথমিক উপায়ে জটিল বস্তুর গঠন সংজ্ঞায়িত করতে পারি: ইন্টারফেস (interface) অথবা Type Aliases (type) ব্যবহার করে। উভয়ই একটি বস্তু বা ডেটা কাঠামোর "আকৃতি" বর্ণনা করতে পরিবেশন করে, তবে তাদের কয়েকটি মৌলিক পার্থক্য রয়েছে।


ইন্টারফেস (interface)

একটি ইন্টারফেস একটি বস্তুর কাঠামোর জন্য একটি চুক্তি সংজ্ঞায়িত করে। এটি একটি এক্সটেনসিবল উপায়ে অবজেক্টের আকার এবং সর্বজনীন API বর্ণনা করার জন্য আদর্শ টুল।

TS
interface Book {
  title: string;
  pages: number;
  author?: string; // Optional property (can be omitted)
}

const myBook: Book = {
  title: 'The Lord of the Rings',
  pages: 1200,
};

প্রশ্ন চিহ্ন (?) একটি সম্পত্তিকে ঐচ্ছিক হিসেবে চিহ্নিত করে। myBook অবজেক্টটি বৈধ এমনকি যদি এটি author প্রপার্টি বাদ দেয়।


টাইপ উপনাম (type)

একটি টাইপ উপনাম আপনাকে আদিম প্রকার, ইউনিয়ন, টিপলস, বা সম্পূর্ণ অবজেক্ট স্ট্রাকচার সহ যেকোন বিদ্যমান প্রকারের সাথে একটি নতুন নাম যুক্ত করতে দেয়।

TS
type Point = {
  x: number;
  y: number;
};

const coordinates: Point = { x: 10, y: 20 };

মূল পার্থক্য: এক্সটেনশন এবং ঘোষণা মার্জিং

যদিও interface এবং type বেশিরভাগ সাধারণ ব্যবহারের ক্ষেত্রে বিনিময়যোগ্য, তারা দুটি গুরুত্বপূর্ণ পার্থক্য প্রদর্শন করে:

1. এক্সটেনসিবিলিটি (উত্তরাধিকার)

ইন্টারফেসগুলি extends কীওয়ার্ড ব্যবহার করে প্রসারিত করা হয়েছে:

TS
interface User {
  username: string;
}

interface Admin extends User {
  privileges: string[];
}

প্রকার উপনামগুলি extends ব্যবহার করে বাড়ানো যাবে না, তবে সেগুলিকে ইন্টারসেকশন অপারেটর (&) ব্যবহার করে একত্রিত করা যেতে পারে:

TS
type User = {
  username: string;
};

type Admin = User & {
  privileges: string[];
};

2. ঘোষণা মার্জিং

একই সুযোগে একই নামের একাধিক ইন্টারফেস স্বয়ংক্রিয়ভাবে কম্পাইলার দ্বারা একত্রিত হয়:

TS
interface User {
  name: string;
}
interface User {
  email: string;
}
// Now User has both 'name' and 'email'!

এই আচরণ সমর্থিত নয় টাইপ উপনামের দ্বারা: একই type দুবার ঘোষণা করলে একটি কম্পাইল-টাইম ত্রুটি ট্রিগার হবে।


নিজে চেষ্টা করে দেখুন

অনুশীলনী 1: ইউজার ইন্টারফেস

ব্যায়াম#ts.m2.l1.e1
প্রচেষ্টা: 0লোড হচ্ছে...

ব্যবহারকারী নামে একটি ইন্টারফেস সংজ্ঞায়িত করুন যা একটি ব্যবহারকারী বস্তুকে বর্ণনা করে। ইন্টারফেসে অবশ্যই থাকতে হবে: একটি সংখ্যা হিসাবে id, একটি স্ট্রিং হিসাবে ব্যবহারকারীর নাম এবং একটি ঐচ্ছিক স্ট্রিং হিসাবে ইমেল৷

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

সিনট্যাক্স ইমেল ব্যবহার করুন?: স্ট্রিংটি ঐচ্ছিক হিসাবে চিহ্নিত করতে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

অনুশীলনী 2: Point2D টাইপ উপনাম

ব্যায়াম#ts.m2.l1.e2
প্রচেষ্টা: 0লোড হচ্ছে...

স্থানাঙ্ক x এবং y (উভয় সংখ্যা) সহ একটি দ্বি-মাত্রিক বিন্দু প্রতিনিধিত্ব করে Point2D নামে একটি টাইপ উপনাম তৈরি করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

সিনট্যাক্স টাইপ ব্যবহার করুন Point2D = { x: সংখ্যা; y: সংখ্যা; };

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম 3: ইন্টারফেস প্রসারিত করা

ব্যায়াম#ts.m2.l1.e3
প্রচেষ্টা: 0লোড হচ্ছে...

আইডি (সংখ্যা) এবং মূল্য (সংখ্যা) সহ পণ্য নামের একটি ইন্টারফেস সংজ্ঞায়িত করুন। এরপরে, DiscountedProduct নামে একটি ইন্টারফেস সংজ্ঞায়িত করুন যা পণ্যকে প্রসারিত করে এবং discountCode (স্ট্রিং) নামে একটি ঐচ্ছিক সম্পত্তি যোগ করে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ক্ষেত্রগুলিকে উত্তরাধিকারী করতে প্রসারিত পণ্য ব্যবহার করুন এবং ডিসকাউন্টকোড যোগ করুন?: স্ট্রিং।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

অনুশীলনী 4: সার্ভার কনফিগারেশন

ব্যায়াম#ts.m2.l1.e4
প্রচেষ্টা: 0লোড হচ্ছে...

একটি সার্ভারের জন্য একটি কনফিগারেশন অবজেক্ট প্রতিনিধিত্বকারী ServerConfig নামের একটি টাইপ উপনাম সংজ্ঞায়িত করুন। এটি অবশ্যই থাকতে হবে: হোস্ট (স্ট্রিং), পোর্ট (সংখ্যা), এবং একটি ঐচ্ছিক বুলিয়ান ক্ষেত্র হিসাবে Https ব্যবহার করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

সিনট্যাক্স টাইপ ব্যবহার করুন ServerConfig = { host: string; পোর্ট: সংখ্যা; useHttps?: বুলিয়ান; }

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ