Conditional Types

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

243

TypeScript-এ Conditional Types একটি শক্তিশালী ফিচার, যা টাইপ সিস্টেমের মধ্যে শর্তসাপেক্ষ (conditional) লজিক প্রয়োগ করতে দেয়। এটি আপনার কোডে আরও নমনীয়তা এবং ডায়নামিক টাইপ ব্যবহারের সুযোগ সৃষ্টি করে। Conditional Types এর মাধ্যমে আপনি টাইপের মধ্যে শর্ত নির্ধারণ করতে পারেন এবং এই শর্তের ভিত্তিতে টাইপ চয়েজ করতে পারেন।

Conditional Types মূলত extends এবং infer কিওয়ার্ড ব্যবহার করে কাজ করে। এটি টাইপকে একটি শর্তের ওপর নির্ভর করে পরিবর্তন করতে সক্ষম।


১. Conditional Types এর সাধারণ গঠন

Conditional Types এর সাধারণ সিনট্যাক্স কিছুটা এইরকম:

T extends U ? X : Y

এখানে:

  • T হলো প্রথম টাইপ
  • U হলো দ্বিতীয় টাইপ
  • X হলো শর্ত সত্য হলে যে টাইপ রিটার্ন করা হবে
  • Y হলো শর্ত মিথ্যা হলে যে টাইপ রিটার্ন করা হবে

এই গঠনটি পড়লে এটা বোঝা যায় যে, যদি টাইপ T টাইপ U কে এক্সটেন্ড (বা সাপোর্ট) করে, তবে টাইপ X প্রদান করা হবে, অন্যথায় টাইপ Y প্রদান করা হবে।


২. Conditional Types এর উদাহরণ

১. বেসিক Conditional Type

ধরা যাক, আমাদের একটি টাইপ রয়েছে যা টাইপ T কে অন্য একটি টাইপ U এর সাথে তুলনা করবে এবং তার উপর ভিত্তি করে কিছু কাজ করবে।

type IsString<T> = T extends string ? "Yes" : "No";

let result1: IsString<string> = "Yes";  // এটি সঠিক
let result2: IsString<number> = "No";   // এটি সঠিক

এখানে IsString একটি টাইপ ডিফিনিশন যা চেক করে যে T টাইপটি string টাইপকে এক্সটেন্ড করে কিনা। যদি T টাইপ string হয়, তবে "Yes" রিটার্ন হবে, অন্যথায় "No"

২. নেস্টেড Conditional Types

Conditional Types বিভিন্ন জায়গায় নেস্টেড (nested) হতে পারে। এটি আরও জটিল শর্ত এবং টাইপ নির্ধারণ করতে সহায়তা করে।

type IsStringOrNumber<T> = T extends string ? "String" : T extends number ? "Number" : "Other";

let result1: IsStringOrNumber<string> = "String";  // এটি সঠিক
let result2: IsStringOrNumber<number> = "Number";  // এটি সঠিক
let result3: IsStringOrNumber<boolean> = "Other";  // এটি সঠিক

এখানে, প্রথমে চেক করা হচ্ছে T টাইপ যদি string হয় তবে "String" রিটার্ন হবে, আর যদি T টাইপ number হয়, তবে "Number" রিটার্ন হবে, অন্যথায় "Other"


৩. Infer কিওয়ার্ড ব্যবহার করা

infer কিওয়ার্ড ব্যবহার করে টাইপের মধ্যে অন্তর্নিহিত টাইপ নির্ধারণ করতে পারবেন। এটি সাধারণত ঐক্যফল (tuple) বা ফাংশনের রিটার্ন টাইপের মতো কেসে ব্যবহৃত হয়।

উদাহরণ:

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

type Example = ReturnType<() => string>;  // Example হবে string

এখানে, ReturnType টাইপটি চেক করে যে যদি টাইপ T একটি ফাংশন হয়, তবে তার রিটার্ন টাইপ R থাকবে, অন্যথায় never


৪. ডিস্ট্রিবিউটেড Conditional Types

TypeScript-এ যখন Conditional Types অ্যারে বা ইউনিয়ন টাইপে প্রয়োগ করা হয়, তখন এগুলি ডিস্ট্রিবিউটেড (distributed) হয়, অর্থাৎ, প্রতিটি উপাদানের জন্য আলাদাভাবে শর্ত প্রয়োগ করা হয়।

উদাহরণ:

type IsString<T> = T extends string ? "Yes" : "No";

type Test1 = IsString<string | number>;  // "Yes" | "No"

এখানে, IsString টাইপটি ইউনিয়ন টাইপ string | number এর প্রতিটি উপাদানের জন্য আলাদাভাবে পরীক্ষা করা হয়েছে। তাই, ফলস্বরূপ Test1 টাইপ Yes | No হবে।


৫. Conditional Types এবং কন্ডিশনাল গারান্টি

Conditional Types আপনার কোডে টাইপ সেফটি নিশ্চিত করতে সাহায্য করে। উদাহরণস্বরূপ, যদি আপনি কোনো জেনেরিক টাইপ বা কন্ডিশনাল টাইপ ব্যবহার করেন এবং কিছু বিশেষ শর্তে একটি টাইপ প্রদান করেন, তবে TypeScript স্বয়ংক্রিয়ভাবে টাইপ সঠিকতার গ্যারান্টি দেবে।

উদাহরণ:

type IsArray<T> = T extends any[] ? "Array" : "Not Array";

let arrCheck: IsArray<number[]> = "Array";  // সঠিক
let notArrCheck: IsArray<string> = "Not Array";  // সঠিক

এখানে, IsArray টাইপ চেক করে যে T টাইপটি একটি অ্যারে কিনা। যদি T টাইপ একটি অ্যারে হয়, তবে "Array" রিটার্ন হবে, অন্যথায় "Not Array" রিটার্ন হবে।


TypeScript এর Conditional Types আপনাকে টাইপের ওপর শর্তযুক্ত লজিক প্রয়োগ করতে সহায়তা করে এবং এটি কোডের স্বচ্ছতা এবং টাইপ সেফটি বৃদ্ধি করে। আপনি Conditional Types ব্যবহার করে ডায়নামিক টাইপ চেকিং, টাইপ গ্যারান্টি এবং আরও উন্নত টাইপ সিস্টেম তৈরি করতে পারেন। TypeScript-এ Conditional Types এর সঠিক ব্যবহার কোডের রক্ষণাবেক্ষণ সহজতর করে এবং টাইপ সংক্রান্ত ত্রুটি হ্রাস করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...