Mapped Types
🔁 TypeScript Mapped Types — ব্যাখ্যা ও উদাহরণ
টাইপস্ক্রিপ্টে Mapped Types আপনাকে বিদ্যমান টাইপের প্রপার্টিগুলোর উপর ভিত্তি করে নতুন টাইপ তৈরি করার সুযোগ দেয়, যেখানে প্রতিটি প্রপার্টির টাইপ বা বৈশিষ্ট্য পরিবর্তন করা যায়।
🧮 ১. সংখ্যা থেকে স্ট্রিং: সহজ উদাহরণ
প্রথমে একটি সংখ্যার অ্যারে তৈরি করি:
const arrayOfNumber: number[] = [1, 2, 4];এখন আমরা চাই এটাকে স্ট্রিং অ্যারেতে রূপান্তর করতে। সেটা আমরা ম্যানুয়ালি অথবা ম্যাপড টাইপস ব্যবহার করে করতে পারি।
// ম্যানুয়ালি:
const arrayOfstrings: string[] = ['1', '2', '4'];
// ম্যাপড টাইপস এর সাহায্যে:
const arrayOfstrings2: string[] = arrayOfNumber.map(number => number.toString());
console.log(arrayOfstrings2); // Output: [ '1', '2', '4' ]🗺️ ২. Key ম্যাপিং করে টাইপ পরিবর্তন করা
type AreaNumber = {
height: number;
width: number;
}এখন যদি আমরা height ও width-এর টাইপ string করতে চাই, তাহলে সাধারণভাবে এমনটা হতে পারে:
type AreaString = {
height: string;
width: string;
}✅ সমাধান: Mapped Types ব্যবহার করে টাইপ পরিবর্তন
type AreaString = {
[key in 'height' | 'width']: string;
}
এখানে আমরা height এবং width কে লুপ করে টাইপ string দিয়েছি।
🔑 key in কী?
TypeScript-এ key in হলো Mapped Types তৈরি করার সময় ব্যবহৃত একটি কিওয়ার্ড, যা একটি টাইপের প্রতিটি কী (key) এর উপর লুপ চালিয়ে নতুন টাইপ তৈরি করতে সাহায্য করে।
type Person = {
name: string;
age: number;
}
type StringifiedPerson = {
[key in keyof Person]: string;
}এখানে কী হচ্ছে?
keyof Personরিটার্ন করছে:'name' | 'age'- এরপর
key in keyof Personদিয়ে ওই দুইটি key এর উপর লুপ চালিয়ে টাইপ হিসেবেstringসেট করা
🔁 আগের টাইপ ব্যবহার করে আরও ডাইনামিকভাবে
type AreaString = {
[key in keyof AreaNumber]: string;
}এখানে আমরা AreaNumber টাইপের key গুলো নিয়ে সেই অনুযায়ী নতুন টাইপ বানিয়েছি যেখানে সবগুলো প্রপার্টির টাইপ এখন string।
🔍 ৩. Lookup Type দিয়ে নির্দিষ্ট প্রপার্টির টাইপ বের করা
type Height = AreaNumber['height']; // টাইপ হবে numberএভাবে আমরা একটি টাইপের নির্দিষ্ট প্রপার্টির টাইপ বের করতে পারি।
Lookup Type হলো TypeScript-এর একটি ফিচার যা দিয়ে তুমি কোনো object টাইপের একটি নির্দিষ্ট property-এর টাইপকে আলাদা করে বের করতে পারো।
✅ Basic Syntax:
TypeName['propertyKey']এটা ঠিক JavaScript object থেকে value বের করার মতোই, কিন্তু এখানে আমরা type বের করি।
-
🔍 সহজ উদাহরণ: Lookup Type
ধরি আমাদের একটা
Userটাইপ আছে:type User = { name: string; age: number; isAdmin: boolean; }এখন যদি আমরা
Userটাইপ থেকে শুধুageproperty’s টাইপটা আলাদা করে জানতে চাই — মানেageএর টাইপ কী ছিল — তাহলে আমরা lookup type ব্যবহার করব এভাবে:type AgeType = User['age'];এখন
AgeTypeহবেnumber, কারণUser.ageএর টাইপnumber।
📦 ৪. জেনেরিক ব্যবহার করে ডাইনামিক টাইপ তৈরি করা
type AreaString<T> = {
[key in keyof T]: string;
}
const area1: AreaString<{ width: string; height: number }> = {
width: '1',
height: '2' // এখানে '2' যদি নাম্বার হয় তাহলে টাইপ মিসম্যাচ হবে
}এখানে জেনেরিক টাইপ T প্যারামিটার ব্যবহার করে আমরা যেকোনো টাইপের প্রপার্টিকে string টাইপে রূপান্তর করেছি।
⚙️ ৫. আরও উন্নত: প্রপার্টির টাইপ রিটেইন করে রাখা
উপরের উদাহরণে আমরা সব টাইপকে string করে দিয়েছি। কিন্তু অনেক ক্ষেত্রে আমরা চাই আগের টাইপই রেখে দেই কিন্তু নতুন নামে টাইপ বানাই। সেটা করলে হবে নিচের মতো:
type AreaString<T> = {
[key in keyof T]: T[key];
}এখানে আমরা key গুলোর টাইপ আগের মতোই রেখে দিয়েছি, অর্থাৎ T[key] দ্বারা আগের টাইপ ধরে রেখেছি।
🧠 উপসংহার
Mapped Typesব্যবহার করে সহজেই একটি টাইপের সব properties এর টাইপ পরিবর্তন করা যায়।keyofব্যবহার করে আগের টাইপের key গুলো রিইউজ করা যায়।T[key]দ্বারা আগের টাইপের ভ্যালু টাইপ রিটার্ন করা যায় (lookup type)।- এগুলো ব্যবহার করে reusable, clean এবং maintainable টাইপ তৈরি করা যায়।