ماڈیول اسباق (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 لیتا ہے اور ہر پراپرٹی کو تبدیل کرتا ہے تاکہ یہ ویلیو null (جیسے T[K] | null) کو بھی قبول کر سکے۔
اشارہ دکھائیں۔
نحو کا استعمال کریں [K in keyof T]: T[K] | null میپ شدہ قسم کے آبجیکٹ کے اندر۔
3 کوششوں کے بعد حل دستیاب ہے۔
مشق 2: as کے ساتھ ڈائنامک گیٹرز تیار کرنا
GetterNames<T> کے نام سے ایک میپ شدہ قسم بنائیں جو آبجیکٹ T کی کلیدوں کو 'get' کے ساتھ سابقہ لگا کر اور اصل کلید کو کیپیٹلائز کرکے تبدیل کرتی ہے (کیپٹلائز کا استعمال کریں)۔ مثال کے طور پر، اگر کوئی کلید نام ہے، تو اسے getName بننا چاہیے۔ خصوصیات کی قسم کو () => T[K] پر سیٹ کریں۔
اشارہ دکھائیں۔
کلید کو دوبارہ ترتیب دینے کے لیے \`get\${Capitalize<string & K>}\` کے بطور استعمال کریں اور () => T[K] کو پراپرٹی کی واپسی کی قسم کے طور پر استعمال کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔