ماڈیول اسباق (2/2)
بنیادی عمومیات
Generics (عام پروگرامنگ) TypeScript کی سب سے طاقتور خصوصیات میں سے ایک ہے۔ وہ آپ کو لچکدار، دوبارہ قابل استعمال اجزاء، فنکشنز، اور انٹرفیس لکھنے کی اجازت دیتے ہیں جو زیادہ سے زیادہ قسم کی حفاظت کو برقرار رکھتے ہوئے اور any کے استعمال سے گریز کرتے ہوئے مختلف ڈیٹا کی اقسام کے ساتھ کام کر سکتے ہیں۔
عام افعال
قسموں کے لیے ایک متغیر کے طور پر عام کے بارے میں سوچیں۔ آئیے ایک فنکشن پر غور کریں جو دلیل کے طور پر اس کو پاس کی گئی قدر واپس کرتا ہے:
function identity<T>(arg: T): T {
return arg;
}خط T (Type کے لیے مختصر) قسم کے لیے پلیس ہولڈر ہے۔ جب ہم identity کو کال کرتے ہیں تو TypeScript پاس شدہ دلیل کی قسم کو پکڑ لیتا ہے اور خود بخود T کو اس قسم پر سیٹ کرتا ہے:
const str = identity<string>('Hello'); // T is string
const num = identity(42); // T is number (automatically inferred!)عام انٹرفیس اور عرفی نام
جنرک کو انٹرفیس پر بھی لاگو کیا جا سکتا ہے اور عام کنٹینرز یا ڈیٹا ڈھانچے کی وضاحت کے لیے عرفی نام ٹائپ کیا جا سکتا ہے:
interface Box<T> {
content: T;
}
const stringBox: Box<string> = { content: 'TypeScript' };
const numberBox: Box<number> = { content: 42 };ایک سے زیادہ قسم کے پیرامیٹرز
ہم ایسے افعال یا اقسام کی وضاحت کر سکتے ہیں جو متعدد قسم کے متغیرات کا استعمال کرتے ہیں (مثال کے طور پر، T اور U):
function mergeObjects<T, U>(obj1: T, obj2: U): T & U {
return { ...obj1, ...obj2 };
}عام پابندیاں
بعض اوقات ہم عام کی طرف سے قبول کردہ اقسام کو محدود کرنا چاہتے ہیں۔ ہم رکاوٹ شامل کرنے کے لیے extends کلیدی لفظ استعمال کر سکتے ہیں۔
مثال کے طور پر، اگر ہم چاہتے ہیں کہ عام قسم میں ہمیشہ ایک length خاصیت ہو (جیسے تار یا ارے):
interface HasLength {
length: number;
}
function logLength<T extends HasLength>(arg: T): void {
console.log(arg.length); // Safe! We know arg has 'length'
}
logLength('Hello'); // Valid
logLength([1, 2, 3]); // Valid
// logLength(42); // Error: number does not have a length property!خود ہی آزمائیں۔
ورزش 1: عام شناخت کا فنکشن
عام شناختی فنکشن کو مکمل کریں تاکہ یہ عام قسم T کے قدر پیرامیٹر کو قبول کرے اور اسے بغیر کسی ترمیم کے واپس کر دے۔
اشارہ دکھائیں۔
واپسی کی قسم پیرامیٹر کی طرح ایک ہی عام قسم T ہونی چاہیے۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش 2: عام باکس ریپر
باکس کے نام سے ایک عام انٹرفیس کی وضاحت کریں جو ایک قسم کے پیرامیٹر T کو قبول کرتا ہے اور اس میں T قسم کے مواد کے نام سے ایک خاص خاصیت ہے۔
اشارہ دکھائیں۔
انٹرفیس باکس استعمال کریں<T> { مواد: T; } نحو۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش 3: عام پابندی
getLength کے نام سے ایک عام فنکشن لکھیں جو پیرامیٹر آرگ کو قبول کرتا ہے۔ arg ایک ایسے انٹرفیس تک محدود ہونا چاہیے جس میں لمبائی کی خاصیت (نمبر) ہو۔ فنکشن کو arg.length لوٹانا چاہیے۔
اشارہ دکھائیں۔
فنکشن کو getLength<T extensed HasLength>(arg: T): نمبر اور واپسی arg.length کے بطور قرار دیں۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش 4: عام جوڑا
دو خصوصیات کے ساتھ ایک عام انٹرفیس Pair<T, U> کی وضاحت کریں: پہلی قسم کی T اور دوسری قسم U۔ اگلا، ایک عام فنکشن makePair بنائیں جو پہلے (ٹائپ کی) اور دوسری (ٹائپ U) کو قبول کرے اور پیئر<T, U> کو نافذ کرنے والی چیز کو واپس کرے۔
اشارہ دکھائیں۔
دو عام پیرامیٹرز Pair<T, U> کے لیے نحو کا استعمال کریں اور اس کے مطابق makePair کی وضاحت کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔