مرکزی مواد پر جائیں
ماڈیول 6 · سبق 1 از 2کورس میں 11/14~15 min
ماڈیول اسباق (1/2)

مشروط اقسام اور اندازہ

مشروط قسمیں آپ کو وراثت کے رشتوں کی بنیاد پر غیر معمولی قسم کے فیصلوں کا اظہار کرنے کی اجازت دیتی ہیں۔ نحو جاوا اسکرپٹ کے ٹرنری آپریٹر سے ملتا ہے:

TS
T extends U ? X : Y

اگر قسم T U کو تفویض کرنے کے قابل ہے، تو نتیجے میں آنے والی قسم X ہوگی، ورنہ یہ Y ہوگی۔


بنیادی مشروط اقسام

ایک مشروط قسم کمپائل کے وقت کسی حالت کا اندازہ کرتی ہے:

TS
type IsNumber<T> = T extends number ? true : false;

type A = IsNumber<number>; // true
type B = IsNumber<string>; // false

لچکدار اور متحرک افادیت کی قسمیں تخلیق کرنے کے لیے جنرک کے ساتھ مل کر یہ پیٹرن انتہائی طاقتور ہے۔


infer کے ساتھ نکالنے کی قسم ٹائپ کریں

مشروط قسم کی extends شق کے اندر، ہم infer کلیدی لفظ استعمال کر سکتے ہیں تاکہ کمپائلر کے ذریعہ کسی قسم کے متغیر کا اندازہ لگایا جائے۔

مثال کے طور پر، اگر ہم کسی فنکشن کی واپسی کی قسم کو نکالنا چاہتے ہیں:

TS
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 قسم

ورزش#ts.m6.l1.e1
کوششیں: 0لوڈ ہو رہا ہے…

IsString<T> کے نام سے ایک عام قسم بنائیں جو لفظی قسم کو صحیح لوٹاتا ہے اگر T سٹرنگ کو بڑھاتا ہے، بصورت دیگر غلط۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

نحو کی قسم استعمال کریں IsString<T> = T اسٹرنگ کو بڑھاتا ہے؟ سچ: غلط قسم چیک کرنے کے لیے۔

3 کوششوں کے بعد حل دستیاب ہے۔

مشق 2: infer کے ساتھ ایک صف سے ایک قسم نکالنا

ورزش#ts.m6.l1.e2
کوششیں: 0لوڈ ہو رہا ہے…

ایک عام قسم UnpackArray<T> کی وضاحت کریں جو ایک سرنی T کے عنصر کی قسم کو نکالنے کے لیے infer کا استعمال کرتا ہے۔ اگر T ایک صف ہے (مثال کے طور پر U[])، U واپس کریں، بصورت دیگر اسی قسم کی T واپس کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

T توسیعات کا استعمال کریں (انفر U)[]؟ U : T قیاس شدہ قسم کے متغیر U کا اعلان کرنے اور واپس کرنے کے لیے۔

3 کوششوں کے بعد حل دستیاب ہے۔