Function with Generics
TypeScript generic functions এমন function তৈরি করতে দেয় যা dynamic হলেও টাইপ-সেফ থাকে। Angle bracket <T>
এর মধ্যে type parameter ব্যবহার করে আমরা function গুলোর behavior টাইপ অনুযায়ী control করতে পারি, ঠিক যেমন regular function arguments দিয়ে ভ্যালু নিয়ন্ত্রণ করি।
🎯 Basic Function Without Generic
const createArray = (param) => {
return [param];
};
এখানে কোনো টাইপ নির্দিষ্ট করা হয়নি, তাই এটি টাইপ-সেফ নয়। এখন যদি আমরা এটি টাইপ দিয়ে লিখি:
const createArray = (param: string) => {
return [param];
};
এখানে টাইপ নির্দিষ্ট করা হলেও এটা এক্সট্রিমলি স্ট্যাটিক। আমরা যদি বিভিন্ন টাইপের ভ্যালু এই ফাংশনে পাঠাতে চাই, তাহলে এটা কাজ করবে না। প্রতিবার আলাদা করে টাইপ সেট করতে হবে বা নতুন ফাংশন বানাতে হবে। তাই আমাদের দরকার flexible কিন্তু টাইপ-সেফ একটি solution।
✅ Function with Generics
const createArraywithGeneric = <T>(param: T): T[] => {
return [param];
};
এখানে <T>
হচ্ছে generic টাইপ প্যারামিটার, যেটি ফাংশন কল করার সময় নির্ধারণ করা যায়। উদাহরণ হিসেবে নিচে একটি কল দেখানো হলো:
const resGeneric = createArraywithGeneric<boolean>(true)
এখানে আমরা Boolean টাইপ explicitly পাঠিয়েছি — ফাংশন বুঝে গিয়েছে param
এর টাইপ boolean, এবং array এর টাইপও boolean[] হবে।
📦 Generics with Object Parameter
const addCoursetostudent = <T>(student: T) => {
const course = 'Next Level Web Development';
return {
...student,
course,
};
};
const student1 = addCoursetostudent<{
name: string;
email: string;
devType: string;
haswatch: string;
}>({
name: 'Rahim',
email: 'Rahim@gmail.com',
devType: 'NLWD',
haswatch: 'Apple',
});
এই ফাংশনে আমরা একটি student object পাঠিয়েছি, আর তার সাথে extra একটি course property যোগ করে নতুন object রিটার্ন করেছি। Generics ব্যবহার করার ফলে আমরা যেকোনো টাইপের object পাঠাতে পারি এবং টাইপ সেফটিও বজায় থাকে।
🧩 Generics with Multiple Parameters
const createArraywithGeneric = <T, Q>(param: T, param2: Q): [T, Q] => {
return [param, param2];
};
এখানে আমরা দুইটি generic টাইপ ব্যবহার করেছি — T
ও Q
। নিচে এই ফাংশনের কয়েকটি কল দেখা যাচ্ছে:
const resGeneric = createArraywithGeneric<boolean, string>(true, 'string');
const resGeneric2 = createArraywithGeneric<string, string>('string', 'sfaf');
প্রথম ভ্যালু T
হিসেবে যাচ্ছে, দ্বিতীয়টি Q
হিসেবে যাচ্ছে — সব কিছু টাইপ-সেফ।
🧱 Object এবং Type Alias এর সাথে Generic Function
type User = {
id: number;
name: string;
};
const resGenericObj = createArraywithGeneric<User, User>(
{ id: 23, name: 'Mr.' },
{ id: 25, name: 'Ms.' }
);
এখানে User
নামের একটি টাইপ বানিয়ে আমরা দুইটি object পাঠিয়েছি সেই টাইপ অনুসারে। এতে কোড আরও clean, maintainable এবং readable হয়েছে।
এইভাবেই TypeScript এর generic function-গুলো আমাদের dynamic behavior এর পাশাপাশি full type safety দেয় — যা real-world প্রজেক্টে highly recommended pattern।