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
টাইপ থেকে শুধুage
property’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 টাইপ তৈরি করা যায়।