ماڈیول اسباق (1/2)
مشروط اقسام اور اندازہ
مشروط قسمیں آپ کو وراثت کے رشتوں کی بنیاد پر غیر معمولی قسم کے فیصلوں کا اظہار کرنے کی اجازت دیتی ہیں۔ نحو جاوا اسکرپٹ کے ٹرنری آپریٹر سے ملتا ہے:
T extends U ? X : Yاگر قسم T U کو تفویض کرنے کے قابل ہے، تو نتیجے میں آنے والی قسم X ہوگی، ورنہ یہ Y ہوگی۔
بنیادی مشروط اقسام
ایک مشروط قسم کمپائل کے وقت کسی حالت کا اندازہ کرتی ہے:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falseلچکدار اور متحرک افادیت کی قسمیں تخلیق کرنے کے لیے جنرک کے ساتھ مل کر یہ پیٹرن انتہائی طاقتور ہے۔
infer کے ساتھ نکالنے کی قسم ٹائپ کریں
مشروط قسم کی extends شق کے اندر، ہم infer کلیدی لفظ استعمال کر سکتے ہیں تاکہ کمپائلر کے ذریعہ کسی قسم کے متغیر کا اندازہ لگایا جائے۔
مثال کے طور پر، اگر ہم کسی فنکشن کی واپسی کی قسم کو نکالنا چاہتے ہیں:
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // stringاس مثال میں، infer R TypeScript سے کہتا ہے کہ وہ خود بخود فنکشن کی واپسی کی قسم کا تعین کرے اور اسے مشروط کی مثبت شاخ میں R کے بطور دستیاب کرے۔
خود ہی آزمائیں۔
ورزش 1: IsString قسم
IsString<T> کے نام سے ایک عام قسم بنائیں جو لفظی قسم کو صحیح لوٹاتا ہے اگر T سٹرنگ کو بڑھاتا ہے، بصورت دیگر غلط۔
اشارہ دکھائیں۔
نحو کی قسم استعمال کریں IsString<T> = T اسٹرنگ کو بڑھاتا ہے؟ سچ: غلط قسم چیک کرنے کے لیے۔
3 کوششوں کے بعد حل دستیاب ہے۔
مشق 2: infer کے ساتھ ایک صف سے ایک قسم نکالنا
ایک عام قسم UnpackArray<T> کی وضاحت کریں جو ایک سرنی T کے عنصر کی قسم کو نکالنے کے لیے infer کا استعمال کرتا ہے۔ اگر T ایک صف ہے (مثال کے طور پر U[])، U واپس کریں، بصورت دیگر اسی قسم کی T واپس کریں۔
اشارہ دکھائیں۔
T توسیعات کا استعمال کریں (انفر U)[]؟ U : T قیاس شدہ قسم کے متغیر U کا اعلان کرنے اور واپس کرنے کے لیے۔
3 کوششوں کے بعد حل دستیاب ہے۔