آئیے ایک مثال سے شروع کرتے ہیں۔ تصور کریں کہ آپ بہت سے صارف کے کرداروں کے ساتھ ایک ایپلیکیشن تیار کر رہے ہیں۔ مختلف صارفین کے ذریعہ کسی ایپلیکیشن کا استعمال کرنا کافی عام ہے، ہے نا؟ قطعی کردار یہاں واقعی اہم نہیں ہیں، لیکن ہم کہتے ہیں کہ وہ 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 } }
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'." // } } }