Vivasoft-logo

4.5 টাইপ ম্যাপিং

টাইপ ম্যাপিং হচ্ছে পূর্ববর্তী টাইপ বা ইতোমধ্যে বিদ্যমান টাইপের ওপর ভিত্তি করে নতুন টাইপ তৈরি করার একটি উপায়। Mapped টাইপ হচ্ছে একটি জেনেরিক টাইপ যা নতুন টাইপ তৈরি করার জন্য প্রোপার্টি কী-এর ইউনিয়ন বা সহজভাবে বলতে গেলে keyof ব্যবহার করে এবং সকল অবজেক্ট  কী (Key)  ইটারেট করে। এটি খুব কার্যকর যখন আমরা আগে থেকে অবজেক্ট টাইপের সকল প্রোপার্টি না জানি।

ধরা যাক আমাদের কাছে একটি ইন্টারফেস আছে। আমরা আরো একটি ইন্টারফেস তৈরি করতে চাই যাতে আগের ইন্টারফেসের প্রোপার্টি গুলো আছে। সেক্ষেত্রে পূর্বের ইন্টারফেসটিকেই আবার ব্যবহার করা যায়। তবে ধরা যাক আমরা নতুন ইন্টারফেসটির প্রোপার্টিগুলোতে নতুন এট্রিবিউট যোগ করতে চাই। উদাহরণস্বরূপ আমরা যদি চাই নতুন ইন্টারফেসের প্রোপার্টি গুলো readonly হবে সেক্ষেত্রে আমরা এভাবে লিখতে পারি:

				
					interface Product {
  name: string;
  price: number;
}

interface ReadonlyProduct {
  readonly name: string;
  readonly price: number;
}
				
			

তবে এই ব্যাপারটি বাহুল্য  এবং  বড় পরিসরে  আমরা এ কাজটি করতে চাই না। এই অবস্থায় টাইপ ম্যাপিং আমাদের সুবিধা দেয়। টাইপ ম্যাপিং এর মাধ্যমে আমরা একই সাথে আগের ইন্টারফেসের প্রোপার্টি Dynamically কপি করতে পারি এবং তার এট্রিবিউট বদলাতে পারি। যেমন:

				
					interface Product {
  name: string;
  price: number;
}

type ReadonlyProduct = {
  readonly [Key in keyof Product]: Product[Key]
}
				
			

এখন আমরা যদি ভিন্ন কোন টাইপের অবজেক্ট ব্যবহার করতে চাই তাহলে এখানে জেনেরিক টাইপ প্যারামিটার ব্যবহার করতে পারি। 

				
					interface Product {
  name: string;
  price: number;
}

type ReadonlyProduct<T> = {
  readonly [Key in keyof <T>]: T[Key]
}
				
			

একইরকম ভাবে আমরা একটি অবজেক্ট টাইপের অপশনাল প্রোপার্টি তৈরি করতে পারি। সেক্ষেত্রে আমাদের  ? কোশ্চেন মার্ক এপেন্ড করতে হবে,

				
					type Optional<T> = {
  [K in keyof T]?: T[K]
}
				
			

আবার আমরা অবজেক্ট প্রোপার্টি অপশনালি nullable স্পেসিফাই করে দিতে পারি।

				
					Type Nullable<T> = {
  [K in keyof T]?: T[K] | null
}