টাইপস্ক্রিপ্টে জেনেরিকস
এই প্রবন্ধে টাইপস্ক্রিপ্টে জেনেরিকস ব্যাখ্যা করা হয়েছে।
YouTube Video
টাইপস্ক্রিপ্টে জেনেরিকস
টাইপস্ক্রিপ্টে জেনেরিকস এমন একটি বৈশিষ্ট্য যা আপনাকে টাইপ প্যারামিটারাইজ করে পুনঃব্যবহারযোগ্য এবং টাইপ-নিরাপদ ফাংশন, ক্লাস এবং ইন্টারফেস সংজ্ঞায়িত করতে দেয়। জেনেরিকস ব্যবহার করে আপনি এমন কোড লিখতে পারেন যা নির্দিষ্ট টাইপের উপর নির্ভর করে না, ফলে আপনি বিভিন্ন টাইপে একই অপারেশন করতে পারবেন।
জেনেরিকসের মৌলিক বিষয়সমূহ
জেনেরিকস টেমপ্লেটের মতো কাজ করে যা টাইপকে আর্গুমেন্ট হিসাবে গ্রহণ করে, ফলে ফাংশন এবং ক্লাস বিভিন্ন টাইপ পরিচালনা করতে সক্ষম হয়।
জেনেরিক ফাংশন
নিম্নে একটি উদাহরণ রয়েছে যেখানে জেনেরিকস ব্যবহার করে ফাংশনের আর্গুমেন্ট টাইপ নির্ধারণ করা হয়েছে।
1function identity<T>(value: T): T {
2 return value;
3}
4
5console.log(identity<number>(42)); // 42
6console.log(identity<string>("Hello")); // Hello
Tএকটি জেনেরিক টাইপ আর্গুমেন্ট যা ফাংশনের আর্গুমেন্ট এবং রিটার্ন ভ্যালুর টাইপ উপস্থাপন করে। ফাংশন কল করার সময় প্রকৃত টাইপ নির্ধারিত হয়।- স্পষ্টভাবে
<number>বা<string>উল্লেখ করে, আপনি টাইপ নির্ধারণ করছেন।
টাইপস্ক্রিপ্ট টাইপ ইনফারেন্স সম্পাদন করে বলে জেনেরিক টাইপ স্পষ্ট উল্লেখ ছাড়াও কাজ করে।
1function identity<T>(value: T): T {
2 return value;
3}
4
5console.log(identity(42)); // 42
6console.log(identity("Hello")); // Hello
- স্পষ্টভাবে
<number>বা<string>নির্দিষ্ট না করলেও, টাইপ ইনফারেন্স ঘটে।identity(42)কেnumberহিসেবে এবংidentity("Hello")কেstringহিসেবে নির্ধারিত করা হয়।
জেনেরিকসে বিধিনিষেধ
জেনেরিকসে বিধিনিষেধ আরোপ করে, আপনি নির্দিষ্ট টাইপগুলো গ্রহণ করার জন্য সেগুলোকে সীমাবদ্ধ করতে পারেন।
1function loggingIdentity<T extends { length: number }>(arg: T): T {
2 console.log(arg.length);
3 return arg;
4}
5
6loggingIdentity("Hello"); // 5
7loggingIdentity([1, 2, 3]); // 3
8
9// loggingIdentity(42); // Error: number does not have a length property.
T extends { length: number }উল্লেখ করলে বোঝায় যেTঅবশ্যই একটি টাইপ হতে হবে যার একটিlengthপ্রপার্টি আছে। সুতরাং, যেসব টাইপেlengthপ্রপার্টি নেই, সেগুলো গ্রহণযোগ্য হবে না।
keyof এর সাথে সংমিশ্রণ
generics ও keyof একত্রে ব্যবহার করে, আপনি টাইপ-নিরাপদ উপায়ে প্রোপার্টির নাম পেতে পারেন।
1function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
2 return obj[key];
3}
4
5const person = { name: "Bob", age: 30 };
6const personName = getProperty(person, "name"); // string
7console.log(personName);
8
9// const error = getProperty(person, "unknown"); // Error
Kকেkeyof Tদ্বারা সীমাবদ্ধ করা হয়েছে, অর্থাৎ শুধুমাত্রTতে বিদ্যমান কী-সমূহই নির্ধারিত করা যাবে। অস্তিত্বহীন কোনো কী নির্ধারণ করলে কম্পাইলেশন এরর হবে।
জেনেরিক ক্লাস
ক্লাসগুলোকেও জেনেরিকস ব্যবহার করে সংজ্ঞায়িত করা যেতে পারে। জেনেরিক ক্লাস প্রপার্টি এবং মেথডের জন্য নমনীয় টাইপ সরবরাহ করে।
1class Box<T> {
2 private _value: T;
3
4 constructor(value: T) {
5 this._value = value;
6 }
7
8 public getValue(): T {
9 return this._value;
10 }
11
12 public setValue(value: T): void {
13 this._value = value;
14 }
15}
16
17const numberBox = new Box<number>(100);
18console.log(numberBox.getValue()); // 100
19
20const stringBox = new Box<string>("Hello");
21console.log(stringBox.getValue()); // Hello
Box<T>ক্লাসের অভ্যন্তরে ব্যবহৃতTটাইপকে একটি জেনেরিক হিসেবে ঘোষণা করে। এর ফলে একই ক্লাস বিভিন্ন টাইপের জন্য পুনরায় ব্যবহার করা সম্ভব হয়।
জেনেরিক ইন্টারফেস
জেনেরিকস ইন্টারফেসের সঙ্গেও ব্যবহার করা যেতে পারে।
1interface Pair<T, U> {
2 first: T;
3 second: U;
4}
5
6const numberStringPair: Pair<number, string> = { first: 1, second: "One" };
7console.log(numberStringPair); // { first: 1, second: 'One' }
8
9const booleanArrayPair: Pair<boolean, number[]> = { first: true, second: [1, 2, 3] };
10console.log(booleanArrayPair); // { first: true, second: [ 1, 2, 3 ] }
Pair<T, U>সহ দুটি জেনেরিক টাইপ নির্ধারণ করে, আপনি ভিন্ন টাইপের সংমিশ্রণে একটি অবজেক্ট সংজ্ঞায়িত করতে পারেন।
ডিফল্ট টাইপ আর্গুমেন্ট
জেনেরিক টাইপ আর্গুমেন্টের জন্য একটি ডিফল্ট টাইপ নির্ধারণ করাও সম্ভব।
1function createArray<T = string>(length: number, value: T): T[] {
2 return Array(length).fill(value);
3}
4
5console.log(createArray(3, "a")); // ['a', 'a', 'a']
6console.log(createArray(3, 100)); // [100, 100, 100]
- আমরা
<T = string>দিয়ে ডিফল্ট টাইপ আর্গুমেন্টটিstringহিসাবে সেট করছি। যদি কোনো টাইপ স্পষ্টভাবে নির্ধারণ না করা হয়, তবেTটাইপstringহবে।
জেনেরিক টাইপ অ্যালিয়াস
জেনেরিকগুলি টাইপ অ্যালিয়াস হিসাবেও (type) ব্যবহার করা যেতে পারে।
1type Result<T> = {
2 success: boolean;
3 data: T;
4};
5
6const successResult: Result<number> = { success: true, data: 42 };
7const errorResult: Result<string> = { success: false, data: "Error occurred" };
8
9console.log(successResult); // { success: true, data: 42 }
10console.log(errorResult); // { success: false, data: 'Error occurred' }
Result<T>একটি রেজাল্ট অবজেক্ট উপস্থাপন করে যাTটাইপের ডেটা ধারণ করে। এই ভাবে, আপনি জেনেরিক ব্যবহার করে সহজলভ্য টাইপ অ্যালিয়াস তৈরি করতে পারেন।
একাধিক জেনেরিক টাইপ
একাধিক জেনেরিক টাইপ ব্যবহার করে, আপনি আরও বহুমুখী ফাংশন এবং ক্লাস সংজ্ঞায়িত করতে পারেন।
1function merge<T, U>(obj1: T, obj2: U): T & U {
2 return { ...obj1, ...obj2 };
3}
4
5const person = { name: "Alice" };
6const job = { title: "Engineer" };
7
8const merged = merge(person, job);
9console.log(merged); // { name: 'Alice', title: 'Engineer' }
mergeফাংশন দুটি ভিন্ন টাইপTএবংUগ্রহণ করে এবং একটি নতুন অবজেক্ট ফেরত দিতে তাদেরকে একত্রিত করে।
সারসংক্ষেপ
- জেনেরিক টাইপগুলোকে প্যারামিটার হিসাবে বিবেচনা করে পুনঃব্যবহারযোগ্য এবং টাইপ-নিরাপদ কোড সক্ষম করে।
- ফাংশন, ক্লাস এবং ইন্টারফেসে জেনেরিক ব্যবহার করে, আপনি বিভিন্ন টাইপ পরিচালনা করে এমন নমনীয় লজিক লিখতে পারেন।
- টাইপ আর্গুমেন্টের উপর বিধিনিষেধ যোগ করে বা ডিফল্ট টাইপ আর্গুমেন্ট সেট করে, আপনি জেনেরিকের স্কোপ নিয়ন্ত্রণ করতে পারেন।
জেনেরিক ব্যবহার করে, আপনি টাইপ-স্বাধীন, সাধারণ উদ্দেশ্যের কোড লিখতে পারেন, TypeScript এর শক্তিশালী টাইপ সিস্টেমের সর্বোচ্চ কার্যকারিতা অর্জন করতে পারেন।
আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।