Vivasoft-logo

3.2 ইউনিয়ন টাইপ

টাইপস্ক্রিপ্টে ইউনিয়ন টাইপগুলি একটি ভ্যারিয়েবলে বা ফাংশনে একাধিক টাইপ একসেপ্ট করতে ব্যবহৃত হয়। 

এর মাধ্যমে  একটি ভ্যারিয়েবলে একটি নির্দিষ্ট টাইপ বা একাধিক টাইপ অ্যাসাইন করা যায়। এটি আমাদেরকে  ফ্লেক্সিবিলিটি প্রদান করে এবং কোডের ভুল সনাক্ত করতে সাহায্য করে।

একটি উদাহরণ দিয়ে বিষয়টি পরিষ্কার করা যাক:

				
					let address: string | number;
address = "Dhaka";
console.log(address); // Output: Dhaka


address = 100; 
console.log(address); // Output: 100
				
			

উদাহরণে, address ভ্যারিয়েবলটিতে একটি স্ট্রিং বা একটি সংখ্যা অ্যাসাইন করা হয়েছে। যদি কোনো ভ্যারিয়েবলে একাধিক টাইপের ভ্যালু রাখার দরকার হয় তখন ইউনিয়ন টাইপ সেই সুবিধা দিয়ে থাকে ।

ফাংশনের প্যারামিটার এবং রিটার্ন টাইপ হিসাবেও ইউনিয়ন টাইপ ব্যবহার করা যায় ।

নীচের উদাহরণটি দেখা যাক:

				
					function processAddress (address: string | number): void {
if (typeof address === "string") {
console.log("string value:", address);
} else {
console.log("number value:", address);
}
}


processAddress("Dhaka"); // output: string value: Dhaka
processAddress(42); // output: number value: 42

				
			

এখানে processAddress ফাংশনটি একটি স্ট্রিং বা একটি নাম্বার প্যারামিটার হিসেবে গ্রহণ করে এবং ইনপুটের টাইপ অনুযায়ী আউটপুট প্রিন্ট করে। ফাংশনের প্যারামিটার address একটি ইউনিয়ন টাইপ যা স্ট্রিং বা নাম্বার হতে পারে। আমরা typeof অপারেটর ব্যবহার করে চেক করছি যে প্যারামিটারটি স্ট্রিং না নাম্বার, এর মাধ্যমে আমরা প্রোগ্রামের রানটাইমে ভেরিফাই করতে পারি যে আপনি সঠিক টাইপ পাস করেছেন কি না।

ইউনিয়ন টাইপসমূহ টাইপস্ক্রিপ্টে প্রোগ্রামিং-এর একটি শক্তিশালী ফিচার। এটি আপনাকে কমপ্লেক্স টাইপগুলি সহজে কন্ট্রোল করতে সহায়তা করে। ইউনিয়ন টাইপসমূহের মাধ্যমে আপনি একটি ভ্যারিয়েবল, ফাংশন বা অবজেক্টের টাইপ পরিবর্তনশীল করতে পারেন।

এটি ব্যবহার করে আপনি একাধিক টাইপকে একটি সিঙ্গেল টাইপ হিসাবে ব্যবহার করতে পারেন। এটি অনেক গুরুত্বপূর্ণ যখন আপনার ফাংশনে একাধিক আর্গুমেন্ট থাকে এবং প্রতিটি আর্গুমেন্ট একটি নির্দিষ্ট টাইপ হতে পারে।

একটি উদাহরণ দিয়ে বিষয়টি স্পষ্ট করা যাক:

				
					

function printData(data: string | number): void {
    console.log(data);
}


printData("Welcome"); // Output: Welcome
printData(42); // Output: 42
				
			

উদাহরণে, printData ফাংশনটি একটি স্ট্রিং বা একটি নাম্বার টাইপের প্যারামিটার গ্রহণ করে এবং এটি পাস করা মানটি প্রিন্ট করে।

অপশনাল প্যারামিটারগুলোর সাথে ইউনিয়ন টাইপসমূহ ব্যবহার করা যেতে পারে। নীচের উদাহরণটি দেখুন:

				
					function fetchData(url: string, options?: FetchOptions): void {
    // code logic 
}


interface FetchOptions {
    method?: string;
    headers?: { [key: string]: string };
    body?: string;
}


const requestOptions: FetchOptions = {
    method: "POST",
    headers: {
        "Content-Type": "application/json",
    },
    body: JSON.stringify({ name: "John Doe" }),
};


fetchData("https://example.com/api", requestOptions);

				
			

উদাহরণে, fetchData ফাংশনটি একটি URL এবং options অবজেক্ট গ্রহণ করে। FetchOptions ইন্টারফেস একটি অপশনাল অবজেক্ট হিসাবে ডিফাইন করা হয়েছে যার মাধ্যমে আপনি প্রতিটি প্যারামিটারের একটি নির্দিষ্ট টাইপ বা মান পাস করতে পারেন। এখানে options প্যারামিটারটি একটি ইউনিয়ন টাইপ FetchOptions হিসাবে ডিফাইন করা হয়েছে, যা একটি একাধিক প্রপার্টি ধারণ করতে পারে।

ইউনিয়ন টাইপসমূহ ব্যবহার করে একাধিক টাইপগুলির মাঝে কন্ট্রোল পাওয়া যায় এবং কমপ্লেক্স ডেটা স্ট্রাকচার তৈরি করা যায়।

একটি উদাহরণ :

				
					interface Square {
    type: "square";
    size: number;
}


interface Circle {
    type: "circle";
    radius: number;
}


type Shape = Square | Circle;


function getArea(shape: Shape): number {
if (shape.type === "square") {
    return shape.size ** 2;
} else if (shape.type === "circle") {
    return Math.PI * shape.radius ** 2;
} else {
// Unexpected type
    throw new Error("Unexpected type");
}
}


const square: Square = { type: "square", size: 5 };
const circle: Circle = { type: "circle", radius: 3 };


console.log(getArea(square)); // output: 25
console.log(getArea(circle)); // output: 28.274333882308138