মডিউল পাঠ (2/2)
ম্যাপ করা প্রকার
ম্যাপ করা প্রকারগুলি আপনাকে বিদ্যমান বৈশিষ্ট্যগুলিকে একের পর এক রূপান্তরিত করে নতুন প্রকারগুলি তৈরি করতে দেয়৷ এগুলি keyof অপারেটর ব্যবহার করে কীগুলির উপরে লুপ সিনট্যাক্সের উপরে তৈরি করা হয়েছে৷
type Mapped<T> = {
[P in keyof T]: T[P];
};এই উদাহরণটি আসলটির মতো একটি ম্যাপ করা টাইপ দেখায়: এটি keyof T এ প্রতিটি কী P এর উপর পুনরাবৃত্তি করে এবং একই ধরনের T[P] বরাদ্দ করে।
পরিবর্তনশীলতা এবং বিকল্প পরিবর্তনকারী
আমরা readonly এবং ? (ঐচ্ছিকতা) এর মতো সংশোধকগুলিকে + (যোগ করুন, ডিফল্ট) বা - (সরান) দিয়ে প্রিফিক্স করে যোগ বা সরাতে পারি।
উদাহরণস্বরূপ, একটি প্রকারের সমস্ত বৈশিষ্ট্য থেকে ঐচ্ছিকতা অপসারণ করতে (এগুলিকে প্রয়োজনীয় করে তোলে):
type Concrete<T> = {
[P in keyof T]-?: T[P];
};-? সংশোধক প্রতিটি সম্পত্তি থেকে ঐচ্ছিক পতাকা সরিয়ে দেয়।
as দিয়ে কী রিম্যাপিং
TypeScript 4.1+ এ, আপনি as ধারা এবং টেমপ্লেট আক্ষরিক প্রকারগুলি ব্যবহার করে একটি ম্যাপ করা টাইপে কীগুলি পুনরায় ম্যাপ করতে পারেন৷
type WriteSetters<T> = {
[K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void;
};এখানে আমরা প্রতিটি প্রপার্টির নাম K set[CapitalizedKey] এ পরিবর্তন করছি এবং সেটির ধরনকে একটি সেটার ফাংশনে পরিবর্তন করছি।
নিজে চেষ্টা করে দেখুন
ব্যায়াম 1: বৈশিষ্ট্য শূন্য করা
একটি জেনেরিক ম্যাপ করা টাইপ Nullable<T> ঘোষণা করুন যা একটি অবজেক্ট T নেয় এবং প্রতিটি সম্পত্তিকে রূপান্তর করে যাতে এটি মান নালকেও গ্রহণ করতে পারে (যেমন T[K] | নাল)।
ইঙ্গিত দেখান
সিনট্যাক্স ব্যবহার করুন [K in keyof T]: T[K] | শূন্য; ম্যাপ করা টাইপ অবজেক্টের ভিতরে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম 2: as এর সাথে ডায়নামিক গেটার তৈরি করা
GetterNames<T> নামে একটি ম্যাপ করা টাইপ তৈরি করুন যা T অবজেক্টের কীগুলিকে 'get' দিয়ে প্রিফিক্স করে এবং মূল কীটিকে বড় করে (ক্যাপিটালাইজ ব্যবহার করুন) রূপান্তরিত করে। উদাহরণস্বরূপ, যদি একটি কী নাম হয় তবে এটি getName হওয়া উচিত। বৈশিষ্ট্যের ধরন সেট করুন () => T[K]।
ইঙ্গিত দেখান
কীটি রিম্যাপ করতে \`get\${Capitalize<string & K>}\` হিসেবে ব্যবহার করুন এবং () => T[K] প্রপার্টি রিটার্ন টাইপ হিসেবে ব্যবহার করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ