ویرگول
ورودثبت نام
رهام رفیعی تهرانی
رهام رفیعی تهرانیبرنامه نویسی یک شغل نیست، یک هنره.
رهام رفیعی تهرانی
رهام رفیعی تهرانی
خواندن ۲ دقیقه·۳ سال پیش

موضوع Discriminated Unions در TypeScript


با یک مثال ساده این مقاله رو شروع میکنیم.

فرض کنید میخوایم یک تایپ بنام Shape داشته باشیم که شامل مربع ( square ) ، دایره ( circle ) و مستطیل ( rectangle ) میشه. موضوع اینه که هر کدوم از این سه شکل ویژگی های مخصوص به خودشون رو دارند.

  • مربع طول ضلع داره
  • دایره شعاع داره
  • مستطیل طول و عرض داره

یک راه خیلی ساده اینه که تایپی بنام TShape رو به صورت زیر تعریف کنیم:

با تعریف تایپ TShape میتونیم مربع، مستطیل یا دایره رو تعریف کنیم:

اما مشکل اینه که میتونیم شکل های بی معنی هم داشته باشیم. مثلا دایره ای که طول و عرض داره:

یا مثلا مربعی که شعاع داره:


اینجاست که Discriminated Union ها رو نیاز داریم. فرض کنید سه تایپ مختلف داریم به نام های TCircle و TSquare و TRectangle که همشون یک property مشترک بنام kind دارند:


و یک تایپ TShape که به صورت زیر تعریف میشه:

در این حالت TypeScript دیگه اجازه نمیده یک مربع با property شعاع یا همون radius تعریف کنیم و در صورت همچین تعریفی خطا میده:


روش دوم برای تعریف Discriminated Unions زمانیه که همه تایپ ها یه تعداد property مشترک دارند. مثلا همه شکل ها رنگ محیط ( borderColor ) و رنگ پس زمینه ( fillColor ) دارند.

میتونیم تایپ ها رو به صورت زیر هم تعریف کنیم ( به تعریف TShape دقت کنید )


استفاده از Discriminated Unions مزایای زیادی داره:

  1. امکان Refactoring ساده تر به دلیل تعریف بهتر و قابل درک تر تایپ ها
  2. بررسی جامع تایپ توسط TypeScript و ممانعت از خطای احتمالی
  3. فعال شدن امکان pattern matching در TypeScript
  4. تکمیل کد ( code completion ) بهتر در محیط IDE


امیدوارم از خوندن این مقاله کوتاه لذت برده باشید و براتون مفید بوده باشه.

اگر دوست دارید میتونید از طریق صفحه لینکدین با من در ارتباط باشید :)


typescriptتایپ اسکریپتجاوااسکریپتjavascript
۴
۰
رهام رفیعی تهرانی
رهام رفیعی تهرانی
برنامه نویسی یک شغل نیست، یک هنره.
شاید از این پست‌ها خوشتان بیاید