Sanyanggae LogoSanyanggae

📱 موبائل اور ایپ ڈیولپمنٹ

TypeScript کے مشروط ٹائپ اور infer: چھوٹی مثالوں سے ٹائپ بدلنا

مشروط ٹائپ، یونین کی تقسیم اور ٹیمپلیٹ لٹرل کی مثالیں اور اجرا کے دوران جانچ سے ان کا فرق۔

사냥개 (Sanyanggae)شائع شدہ تازہ کاری 7 منٹ

یہ کوریائی اصل متن کا ترجمہ ہے۔ کوریائی اصل متن · ترجمے کا جائزہ: مصنوعی ذہانت سے جائزہ

TypeScript کے مشروط ٹائپ اور infer: چھوٹی مثالوں سے ٹائپ بدلنا: مشروط ٹائپ، infer اور تقسیم، اجرا کی جانچ کی وضاحت کا خاکہ
سانیانگے کا وضاحتی خاکہ · مشروط ٹائپ · infer اور تقسیم · اجرا کی جانچ۔

TypeScript میں ملتے جلتے اعلانات دہرائیں تو ان پٹ ٹائپ سے نتیجہ نکالنے کا طریقہ ڈھونڈتے ہیں۔ کم حروف سے زیادہ اہم یہ ہے کہ قاری کو ٹائپ کا باہمی تعلق واضح ہو۔ فرضی ترسیلی اطلاع سروس سے مشروط ٹائپ اور infer سمجھ کر بیرونی ڈیٹا واقعی درست ہونے کی جانچ سے الگ کریں گے۔

1. مشروط ٹائپ، ٹائپ کو ان پٹ بنانے والی شاخ بندی ہے

سرکاری مشروط ٹائپ دستاویز extends کی شرط سے نتیجہ چننا بتاتی ہے۔ مثال سٹرنگ ٹائپ ہونے کے مطابق بولین لٹرل بناتی ہے۔ یہ چلتے وقت سٹرنگ آزمانے والا فنکشن نہیں۔

type IsText<T> = T extends string ? true : false;
type NameIsText = IsText<'parcel'>; // true
type CountIsText = IsText<3>;       // false

فرض کریں اطلاع کا فنکشن سٹرنگ شناخت اور اندرونی فنکشن عددی شناخت لیتا ہے۔ مشروط ٹائپ سے پہلے ان کو الگ کرنے کی وجہ بتائیں۔ معنی واقعی مختلف ہوں تو نام الگ، صرف صورت مختلف ہو تو ایک ان پٹ زیادہ پڑھنے لائق ہوسکتا ہے۔ ٹائپ کی ترکیب سے ڈیٹا ڈیزائن کا ابہام نہ چھپائیں۔

متوقع ان پٹ اور نتیجہ جوڑوں میں لکھیں۔ سٹرنگ، عدد، یونین اور غیرمتوقع ان پٹ کی چھوٹی مثالیں پیچیدہ اعلان آسان کرتی ہیں۔ تبصرے کا نتیجہ ایڈیٹر کے اخذ کردہ ٹائپ سے ملائیں۔ فطری نام کے باوجود اصل حساب مختلف ہوسکتا ہے۔

2. یونین کی تقسیم ارے کا مطلب بدلتی ہے

ٹائپ پیرامیٹر شرط کے بائیں براہ راست ہو تو ہر یونین رکن پر شرط تقسیم ہوتی ہے۔ روک کر پوری یونین ایک اکائی بنانی ہو تو مربع قوس والی صورت ملائیں۔

type SeparateLists<T> = T extends unknown ? T[] : never;
type Together<T> = [T] extends [unknown] ? T[] : never;
type A = SeparateLists<string | number>; // string[] | number[]
type B = Together<string | number>;      // (string | number)[]
const a: A = ['a', 'b'];
const b: B = ['a', 1];

پہلا صرف سٹرنگوں کا یا صرف اعداد کا ارے ہے۔ دوسرے میں دونوں ایک ارے میں مل سکتے ہیں۔ پوری ترسیلی فہرست میں ایک کوڈ کی قسم یا ہر اندراج میں الگ قسم کی اجازت کے مطابق نتیجہ بدلتا ہے۔ قوس دونوں میں نظر آتی ہے مگر معاہدہ یکساں نہیں۔

مسئلہ ہو تو پوری پیچیدہ یوٹیلٹی پڑھنے کے بجائے رکن الگ ان پٹ دیں۔ سٹرنگ، عدد اور دونوں کی یونین کے نتائج ملائیں۔ تقسیم مقصود ہے یا نہیں واضح ہو تو قوس کی وجہ بتا سکیں گے۔ جائزے میں صرف آخری نتیجہ نہیں، قابلِ قبول قدر کی مثال بھی رکھیں۔

3. infer ساخت کے اندر کے ٹائپ کو نام دیتا ہے

مشروط ٹائپ کی ملائی ہوئی ساخت کے حصے کو infer نام دیتا ہے۔ یہ چھوٹی مثال Promise کی ایک تہہ ہٹاتی ہے۔

type OneResult<T> = T extends Promise<infer Value> ? Value : T;
type Parcel = OneResult<Promise<{ tracking: string }>>;
type ParcelList = OneResult<Promise<string[]>>;

یہ کوڈ غیرمتزامن کام نہ چلاتا نہ انتظار کرتا ہے، صرف کمپائل میں نتیجے کی شکل بتاتا ہے۔ Resolved نام سے قدر پہلے آچکی ہونے کا تاثر ہوسکتا ہے؛ استعمال کا سیاق دیکھیں۔ چلتے وقت انتظار اب بھی غیرمتزامن کوڈ میں ہوگا۔

بار بار تہہ کھول کر منتظر نتیجہ چاہیے تو ایک تہہ کی مثال بڑھانے سے پہلے معیاری Awaited دیکھیں۔ تدریسی سادگی اور مشترک آلے کی ضرورت الگ ہیں۔ ٹیم کی نئی یوٹیلٹی میں وہ ان پٹ لکھیں جس پر معیار سے نتیجہ مختلف اور اس فرق کی ضرورت کیوں ہے۔

4. ٹیمپلیٹ لٹرل سے واقعے کا نام ملانا

ٹیمپلیٹ لٹرل ٹائپ سٹرنگ لٹرل کے ملاپ کو ٹائپ بناتے ہیں۔ ترسیل سروس میں دائرہ اور عمل ملا کر واقعے کا نام ہوسکتا ہے۔

type Scope = 'parcel' | 'address';
type Action = 'created' | 'updated';
type EventName = `${Scope}:${Action}`;
const event: EventName = 'parcel:created';

کمپائل میں املا غلطی ملتی ہے، مگر ہر بننے والا واقعہ اصل سروس میں درست ہو یہ الگ ہے۔ صرف پتہ حذف کرنے کا واقعہ ہو تو دائرے اور عمل کی سادہ ضرب صحیح اصول نہیں دیتی۔ پہلے مجاز واقعے اور payload کا واضح جوڑ سوچیں۔

واقعات بڑھیں تو قاری اصل نام آسانی سے پائے۔ کئی خودکار ملاپ کے بجائے بیرونی نظام کے نام ایک فائل میں رکھ سکتے ہیں۔ تجرید سے پہلے و بعد نئے ساتھی کا غلط واقعہ ڈھونڈنا ملائیں۔ ٹائپ کی نفاست اور استعمال ساتھ پرکھیں۔

5. بیرونی JSON کو اجرا کے دوران جانچیں

API جواب پر User یا Parcel ٹائپ لکھنے سے اصل ساخت کی ضمانت نہیں۔ unknown میں لے کر ضروری فیلڈ آزمانے کی سادہ صورت دیکھیں۔

function hasTracking(value: unknown): value is { tracking: string } {
  return typeof value === 'object' && value !== null
    && 'tracking' in value && typeof value.tracking === 'string';
}
const incoming: unknown = { tracking: 'DEMO-001' };
if (hasTracking(incoming)) console.log(incoming.tracking);

یہ صرف tracking سٹرنگ ہونے کو جانچتا ہے، اصل نمبر کے وجود یا صارف کو ترسیل دیکھنے کی اجازت کو نہیں۔ ٹائپ محدود کرنا، کاروباری اصول اور اجازت الگ ذمہ داریاں ہیں۔ سرکاری Narrowing شرط سے معلومات محدود ہونا بتاتی ہے۔

6. ٹائپ کے آلے کے انتخاب کا چھوٹا جائزہ

پہلے دو اصل قابلِ قبول اور دو نامنظور قدریں لکھیں۔ عام یونین اور واضح آبجیکٹ سے معنی بنائیں۔ بار بار تعلق بچے تو مشروط ٹائپ یا infer کی وجہ واضح ہوتی ہے۔ اعلان پڑھنے کا وقت بہت بڑھے تو صرف مشترک حصہ نکال کر باقی عام ٹائپ رکھ سکتے ہیں۔

آخر میں ٹائپ اور اجرا کی جانچ الگ چلائیں۔ غلط واقعے کا کمپائلر سے رد اور سرور کے گم فیلڈ پر پروگرام کی وضاحت ایک دوسرے کی مدد ہیں۔ چھوٹی مثال کے بعد اصل ان پٹ حد سے جوڑنے پر تبدیلی محفوظ اطلاقی ڈیزائن میں کام آتی ہے۔

شواہد اور حوالے

  • Conditional Types

    TypeScript · ماخذ دیکھنے کی تاریخ

  • Template Literal Types

    TypeScript · ماخذ دیکھنے کی تاریخ

  • Utility Types

    TypeScript · ماخذ دیکھنے کی تاریخ

  • Narrowing

    TypeScript · ماخذ دیکھنے کی تاریخ

یہ مضمون عوامی ماخذ کی معلومات سمجھاتا ہے۔ حوالہ دینا متعلقہ ادارے کی جانچ یا توثیق کی علامت نہیں۔

ناشر کا تعارف اور رابطہ

اسی موضوع کے دوسرے مضامین