paint-brush
ٹائپ اسکرپٹ میں امتیازی یونینوں کی طاقتکی طرف سے@tokenvolt
242 ریڈنگز

ٹائپ اسکرپٹ میں امتیازی یونینوں کی طاقت

کی طرف سے Oleksandr Khrustalov4m2024/10/05
Read on Terminal Reader

بہت لمبا؛ پڑھنے کے لئے

یہ کہانی TypeScrips میں امتیازی یونینوں کی بنیادی باتوں کا جائزہ لیتی ہے۔ میں ان کو اکثر اپنی نشوونما میں استعمال کرتا ہوں، لہذا ہم ان کو لاگو کرنے کے بارے میں ایک خاص مثال دیکھیں گے۔
featured image - ٹائپ اسکرپٹ میں امتیازی یونینوں کی طاقت
Oleksandr Khrustalov HackerNoon profile picture

مسئلہ بیان کرنا

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


آئیے ایک مثال سے شروع کرتے ہیں۔ تصور کریں کہ آپ بہت سے صارف کے کرداروں کے ساتھ ایک ایپلیکیشن تیار کر رہے ہیں۔ مختلف صارفین کے ذریعہ کسی ایپلیکیشن کا استعمال کرنا کافی عام ہے، ہے نا؟ قطعی کردار یہاں واقعی اہم نہیں ہیں، لیکن ہم کہتے ہیں کہ وہ admin ، consumer اور guest ہیں۔ ٹائپ اسکرپٹ میں، ہم ان کرداروں کے حامل صارفین کو درج ذیل قرار دے سکتے ہیں:


 type Admin = {} type Consumer = {} type Guest = {}


اب، آئیے ہر صارف کے کردار کے اوصاف کے ایک سیٹ پر غور کریں۔ عام طور پر، وہ email ، firstName اور lastName یا اس جیسا کچھ ہوتے ہیں۔ لیکن، انتظار کریں، Guest صارفین کے پاس شاید وہ نہیں ہوں گے (وہ آخر کار مہمان ہیں)، تو آئیے ابھی اس قسم کو خالی چھوڑ دیں۔


 type Admin = { firstName: string lastName: string email: string } type Consumer = { firstName: string lastName: string email: string } type Guest = {}


ایپلیکیشن کا صارف صرف ایک کردار کا ہو سکتا ہے۔ اقسام کے ذریعے اس کی نمائندگی کرنے کا طریقہ union قسم کا استعمال کرنا ہے۔


 type User = Admin | Consumer | Guest


منتظمین اپنی خصوصی صلاحیتوں کے لیے مشہور ہیں، اور ہماری درخواست میں، وہ صارفین کو مدعو کرنے کے اہل ہیں۔ آئیے ایک فیلڈ شامل کریں جس سے ظاہر ہوتا ہے کہ ایک منتظم کتنے دعوت نامے بھیج سکتا ہے۔


 type Admin = { firstName: string lastName: string email: string numberOfInvitesLeft: number // <-- added }


چیزوں کو مزید دلچسپ اور حقیقی ایپلیکیشن کے قریب تر بنانے کے لیے، آئیے Consumer قسم کے لیے خصوصی پراپرٹی شامل کریں۔


 type Consumer = { firstName: string lastName: string email: string premium: boolean // <-- added }


یہ ایک بہت ہی سادہ مثال ہے، اور حقیقت میں، صارفین کے پاس درجنوں مختلف خصوصیات ہو سکتی ہیں، جو کہ کوڈبیس کو کافی حد تک پیچیدہ بنا دیتی ہیں جب آپ کو مخصوص خصوصیات تک رسائی کی ضرورت ہوتی ہے۔


 const doSomethingBasedOnRole = (user: User) => { // how do you check here that user is really an admin if (user) { // ...and do something with the `numberOfInvitesLeft` property? } }


ایک آپشن جائیداد کے وجود کی جانچ کرنا ہے۔


 const doSomethingBasedOnRole = (user: User) => { if (user && user.numberOfInvitesLeft) { // safely access `numberOfInvitesLeft` property } }


لیکن یہ ایک تکلیف دہ اور قابل توسیع حل نہیں ہے۔ اور جب `numberOfInvitesLeft` ایک اختیاری پراپرٹی بن جائے تو کیا کریں؟

امتیازی یونین کی اقسام کا تعارف

یہ وہ جگہ ہے جہاں امتیازی یونین کی اقسام کھیل میں آتی ہیں۔ ہمیں صرف ہر صارف کی قسم میں ایک اضافی فیلڈ ڈالنے کی ضرورت ہے جو کردار کی نشاندہی کرتا ہے۔


 type Admin = { firstName: string lastName: string email: string numberOfInvitesLeft: number role: "admin" // <-- added } type Consumer = { firstName: string lastName: string email: string role: "consumer" // <-- added } type Guest = { role: "guest" // <-- added }


غور کریں کہ میں کس طرح ایک مخصوص سٹرنگ کو بطور قسم ڈال رہا ہوں؛ اسے سٹرنگ لٹریل ٹائپ کہا جاتا ہے۔ اس سے آپ کو کیا ملتا ہے کہ اب آپ مقامی جے ایس لینگویج آپریٹرز کو استعمال کر سکتے ہیں، مثال کے طور پر، switch case , if , else کردار میں امتیاز کرنے کے لیے۔


 const user: Admin = { firstName: "John", lastName: "Smith", email: "[email protected]", numberOfInvitesLeft: 3, role: "admin", } const doSomethingBasedOnRole = (user: User) => { if (user.role === "admin") { // now typescript knows that INSIDE of this block user is of type `Admin` // now you can safely call `user.numberOfInvitesLeft` within this block } }


سوئچ کیس کے بیان پر بھی یہی لاگو ہوتا ہے۔


 // ... const doSomethingBasedOnRole = (user: User) => { switch (user.role) { case "admin": { // now typescript knows that INSIDE of this block user is of type `Admin` // now you can safely call `user.numberOfInvitesLeft` within this block } case "consumer": { // do something with a `Consumer` user // if you try to call `user.numberOfInvitesLeft` here, TS compiler errors in // // "Property 'numberOfInvitesLeft' does not exist on type 'Consumer'." // } } }


امتیازی یونین کی اقسام کے فوائد واضح ہیں کیونکہ قسم کی جانچ واضح کردار کی خاصیت پر مبنی ہے نہ کہ ایڈہاک خصوصیات پر جو کہ کسی مخصوص صارف سے متعلق ہو یا نہ ہو۔