কনস্ট্রেইন্টস সহ জেনেরিকস

TypeScript ফাংশন এবং জেনেরিকস - টাইপস্ক্রিপ্ট (Typescript) - Web Development

269

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


১. জেনেরিকস কী?

জেনেরিকস টাইপকে ভ্যারিয়েবল হিসাবে ব্যবহার করতে সাহায্য করে। এর মাধ্যমে আপনি নির্দিষ্ট টাইপের পরিবর্তে টাইপ প্যারামিটার ব্যবহার করতে পারেন, যা পরে ফাংশন, ক্লাস, বা ইন্টারফেসের মাধ্যমে নির্দিষ্ট টাইপে রেজলভ (resolve) হবে।

উদাহরণ:

function identity<T>(value: T): T {
  return value;
}

console.log(identity("Hello"));  // "Hello"
console.log(identity(42));       // 42

এখানে T একটি জেনেরিক টাইপ প্যারামিটার, এবং এটি string বা number টাইপের জন্য কাজ করতে পারে। এটি টাইপ সেফ এবং পুনঃব্যবহারযোগ্য।


২. কনস্ট্রেইন্টস সহ জেনেরিকস

কনস্ট্রেইন্টস সহ জেনেরিকস ব্যবহারের মাধ্যমে আপনি নির্দিষ্ট টাইপগুলোর মধ্যে সীমাবদ্ধ করতে পারেন, অর্থাৎ শুধুমাত্র কিছু নির্দিষ্ট টাইপই গ্রহণযোগ্য হবে। এর জন্য <T extends SomeType> সিনট্যাক্স ব্যবহার করা হয়, যেখানে T টাইপের কনস্ট্রেইন্ট থাকে SomeType এর উপরের।

উদাহরণ:

function getLength<T extends { length: number }>(item: T): number {
  return item.length;
}

console.log(getLength("Hello"));       // 5
console.log(getLength([1, 2, 3, 4]));  // 4

এখানে T extends { length: number } কনস্ট্রেইন্ট বলে দেয় যে T টাইপ এমন কিছু হতে হবে যেটির length প্রপার্টি রয়েছে এবং এটি একটি সংখ্যা (number) হতে হবে।

এই উদাহরণে, "Hello" একটি স্ট্রিং, এবং [1, 2, 3, 4] একটি অ্যারে, যা দুটিই length প্রপার্টি ধারণ করে, সুতরাং ফাংশনটি সঠিকভাবে কাজ করে। কিন্তু, যদি আপনি একটি টাইপ পাস করেন যেটির length প্রপার্টি না থাকে, তাহলে TypeScript ত্রুটি (error) দেখাবে।


৩. কনস্ট্রেইন্টস সহ জেনেরিক ক্লাস

আপনি ক্লাসেও কনস্ট্রেইন্টস সহ জেনেরিকস ব্যবহার করতে পারেন। এতে আপনি একটি ক্লাসের টাইপ প্যারামিটার কনস্ট্রেইন্ট করতে পারেন, যাতে শুধুমাত্র নির্দিষ্ট টাইপগুলো গ্রহণযোগ্য হয়।

উদাহরণ:

class Box<T extends number | string> {
  value: T;

  constructor(value: T) {
    this.value = value;
  }

  getValue(): T {
    return this.value;
  }
}

const numberBox = new Box(123);
console.log(numberBox.getValue());  // 123

const stringBox = new Box("Hello");
console.log(stringBox.getValue());  // "Hello"

const boolBox = new Box(true);  // Error: 'boolean' is not assignable to 'number | string'

এখানে Box ক্লাসের T টাইপ কনস্ট্রেইন্টে number | string দেওয়া হয়েছে, যার মানে Box ক্লাস শুধুমাত্র number অথবা string টাইপ গ্রহণ করবে। অন্য টাইপ পাস করলে টাইপ ত্রুটি (type error) দেখাবে।


৪. কনস্ট্রেইন্টস সহ জেনেরিক ইন্টারফেস

এছাড়া, ইন্টারফেস (Interfaces) এর মাধ্যমে আপনি কনস্ট্রেইন্টস সহ জেনেরিকস ব্যবহার করতে পারেন। এটি বিশেষত যখন আপনি টাইপের কাঠামো (structure) নির্দিষ্ট করতে চান, তখন কার্যকর।

উদাহরণ:

interface Lengthwise {
  length: number;
}

function printLength<T extends Lengthwise>(item: T): void {
  console.log(item.length);
}

printLength("Hello");     // 5
printLength([1, 2, 3]);    // 3

printLength(123);          // Error: Argument of type 'number' is not assignable to parameter of type 'Lengthwise'.

এখানে T extends Lengthwise কনস্ট্রেইন্ট নিশ্চিত করে যে শুধুমাত্র সেই সব টাইপ গ্রহণ করা হবে যেগুলোর length প্রপার্টি রয়েছে।


৫. কনস্ট্রেইন্টস সহ মাল্টিপল টাইপস

TypeScript-এ আপনি একাধিক কনস্ট্রেইন্টও ব্যবহার করতে পারেন, যা একটি টাইপের জন্য একাধিক শর্ত বা সীমাবদ্ধতা নির্ধারণ করে।

উদাহরণ:

function merge<T extends { name: string }, U extends { age: number }>(obj1: T, obj2: U): T & U {
  return { ...obj1, ...obj2 };
}

const result = merge({ name: "John" }, { age: 30 });
console.log(result);  // { name: "John", age: 30 }

এখানে T এবং U দুইটি কনস্ট্রেইন্ট প্যারামিটার রয়েছে:

  • T এর মধ্যে name: string থাকতে হবে
  • U এর মধ্যে age: number থাকতে হবে

ফলস্বরূপ, আমরা একটি নতুন অবজেক্ট পাচ্ছি যা উভয় টাইপের প্রপার্টি ধারণ করে।


সারাংশ

  • জেনেরিকস আপনাকে টাইপ প্যারামিটার ব্যবহার করার মাধ্যমে টাইপগুলিকে আরও ডাইনামিক এবং পুনঃব্যবহারযোগ্য করতে সাহায্য করে।
  • কনস্ট্রেইন্টস সহ জেনেরিকস এর মাধ্যমে আপনি টাইপ প্যারামিটারের জন্য কিছু নির্দিষ্ট সীমাবদ্ধতা বা শর্ত নির্ধারণ করতে পারেন।
  • TypeScript এর কনস্ট্রেইন্টস সহ জেনেরিকস ব্যবহারের মাধ্যমে টাইপ সেফ কোড লেখা সহজ হয় এবং কোডের রিফ্যাক্টরিং ও রক্ষণাবেক্ষণ সহজ হয়।

এই ফিচারটি TypeScript কোডে আরো শক্তিশালী টাইপ সিস্টেম বাস্তবায়ন করতে সহায়তা করে, যা বড় প্রজেক্টের ক্ষেত্রে খুবই কার্যকরী।

Content added By
Promotion

Are you sure to start over?

Loading...