Intersection এবং Union Types

TypeScript Advanced Types - টাইপস্ক্রিপ্ট (Typescript) - Web Development

281

TypeScript এ Intersection Types এবং Union Types দুটি গুরুত্বপূর্ণ ধারণা যা ডেটা টাইপের সংমিশ্রণ এবং একাধিক টাইপের মধ্যে কাজ করার ক্ষমতা প্রদান করে। এগুলি টাইপ সিস্টেমের ফ্লেক্সিবিলিটি বাড়ায় এবং বিভিন্ন ধরনের মানের মধ্যে সম্পর্ক বা যোগসূত্র স্থাপন করতে সাহায্য করে।


১. Union Types

Union Types আপনাকে একাধিক টাইপের মধ্যে নির্বাচন করতে দেয়, অর্থাৎ একটি ভ্যারিয়েবল একাধিক টাইপের মান ধারণ করতে পারে। এটি | (পাইপ) চিহ্ন দিয়ে দুটি বা তার বেশি টাইপকে একত্রিত করা হয়।

উদাহরণ: Union Types

let value: string | number;

value = "Hello";   // Valid
value = 42;        // Valid
value = true;      // Error: boolean is not assignable to 'string | number'

এখানে:

  • value ভ্যারিয়েবলটি string অথবা number টাইপের যে কোনো মান গ্রহণ করতে পারে। এটি string | number টাইপ দ্বারা সংজ্ঞায়িত।
  • তবে এটি যদি boolean টাইপের মান গ্রহণ করার চেষ্টা করা হয়, তখন ত্রুটি হবে কারণ boolean এই ইউনিয়ন টাইপে অন্তর্ভুক্ত নয়।

আরেকটি উদাহরণ:

function display(value: string | number) {
  console.log(value);
}

display("Hello, World!");  // Output: Hello, World!
display(100);               // Output: 100

এখানে:

  • display ফাংশনটি string অথবা number টাইপের প্যারামিটার নেয় এবং সেটি কনসোলে প্রিন্ট করে।

২. Intersection Types

Intersection Types আপনাকে একাধিক টাইপকে একত্রিত করতে দেয়, অর্থাৎ একটি ভ্যারিয়েবল একাধিক টাইপের সমস্ত বৈশিষ্ট্য ধারণ করতে পারে। এটি & (অ্যাম্পারস্যান্ড) চিহ্ন দিয়ে বিভিন্ন টাইপকে একত্রিত করা হয়।

উদাহরণ: Intersection Types

interface Person {
  name: string;
  age: number;
}

interface Address {
  street: string;
  city: string;
}

type PersonWithAddress = Person & Address;

const individual: PersonWithAddress = {
  name: "John",
  age: 30,
  street: "123 Main St",
  city: "New York",
};

এখানে:

  • Person এবং Address দুটি আলাদা ইন্টারফেস এবং PersonWithAddress একটি নতুন টাইপ যা Person এবং Address ইন্টারফেসের সব বৈশিষ্ট্য ধারণ করে।
  • individual ভ্যারিয়েবলটি PersonWithAddress টাইপের একটি মান ধারণ করছে, যেখানে name, age, street, এবং city সমস্ত প্রোপার্টি থাকতে হবে।

আরেকটি উদাহরণ:

interface Employee {
  id: number;
  department: string;
}

interface Manager {
  level: string;
  teamSize: number;
}

type ManagerWithEmployee = Employee & Manager;

const manager: ManagerWithEmployee = {
  id: 101,
  department: "HR",
  level: "Senior",
  teamSize: 10,
};

এখানে:

  • ManagerWithEmployee একটি Employee এবং Manager টাইপের মিশ্রণ, যা উভয়ের সব বৈশিষ্ট্য ধারণ করে।

৩. Union Types এবং Intersection Types এর পার্থক্য

Union Types:

  • | চিহ্ন দিয়ে একাধিক টাইপের মধ্যে নির্বাচন করা যায়।
  • একটি ভ্যারিয়েবল একটি টাইপের মধ্যে সীমাবদ্ধ থাকে, তবে সেটি বিভিন্ন টাইপের মান গ্রহণ করতে পারে।
  • এটি একাধিক সম্ভাব্য মানের মধ্যে একটিকে নির্বাচন করার সুযোগ প্রদান করে।

উদাহরণ:

let value: string | number;

Intersection Types:

  • & চিহ্ন দিয়ে একাধিক টাইপের বৈশিষ্ট্যগুলিকে একত্রিত করা হয়।
  • একটি ভ্যারিয়েবল সমস্ত টাইপের বৈশিষ্ট্য ধারণ করতে সক্ষম হয়। এটি টাইপগুলির মিশ্রণ।
  • Intersection types সাধারণত আরও শক্তিশালী এবং কম্পোজেবল, যেখানে একাধিক টাইপের বৈশিষ্ট্যগুলির সমন্বয়ে একটি নতুন টাইপ তৈরি হয়।

উদাহরণ:

type PersonWithAddress = Person & Address;

৪. Union এবং Intersection Types এর ব্যবহার

যখন Union Types ব্যবহার করবেন:

  • যখন আপনার ভ্যারিয়েবলটি একাধিক টাইপের মধ্যে কোন একটি ধরতে পারে, এবং আপনাকে তাদের মধ্যে যেকোনো একটিকে গ্রহণ করতে হবে।
  • উদাহরণস্বরূপ, যখন আপনি একটি ভ্যারিয়েবল যা স্ট্রিং বা সংখ্যার মধ্যে হতে পারে, প্রক্রিয়া করছেন।

যখন Intersection Types ব্যবহার করবেন:

  • যখন আপনার টাইপগুলি একত্রিত করতে চান এবং আপনাকে তাদের সব বৈশিষ্ট্য রাখতে হবে।
  • উদাহরণস্বরূপ, যদি আপনি এমন একটি টাইপ তৈরি করতে চান যা একাধিক ইন্টারফেসের সমস্ত বৈশিষ্ট্য ধারণ করে।

সারাংশ

TypeScript এর Union Types এবং Intersection Types অত্যন্ত শক্তিশালী টাইপিং কৌশল, যা ডেটার সাথে কার্যকরভাবে কাজ করার জন্য দারুণ উপকারী। Union types বিভিন্ন সম্ভাব্য টাইপের মধ্যে একটি নির্বাচন করার সুযোগ দেয়, যেখানে Intersection types বিভিন্ন টাইপের বৈশিষ্ট্যগুলো একত্রিত করে একটি শক্তিশালী নতুন টাইপ তৈরি করে।

Content added By
Promotion

Are you sure to start over?

Loading...