درود دوستان! اگه با تایپاسکریپت کار کرده باشین میدونین که برای یک کار راه حلهای زیادی وجود داره که این موضوع بعضی وقتها تصمیمگیری رو برای انتخاب یک روش درست سخت میکنه. یکی از این دو راهیها، استفاده از تایپ یا اینترفیس هست که توی این قسمت میخوایم تفاوت اونها رو بررسی کنیم.
نکته
هدف این قسمت بررسی تفاوتهای این دو ویژگی هست و هرچند به صورت مختصر با این دو ویژگی آشنا میشیم، فرض میکنیم که با فلسفه و کاربرد اینترفیسها آشنایی دارین.
تایپ (Type Alias) چیه؟
همونطور که میدونیم توی جاوااسکریپت/تایپاسکریپت ما تایپهای مختلفی مثل number و string داریم. اینها تایپهای درونی این زبان هستن. اما با یک ویژگی اختصاصی تایپاسکریپت به اسم Type Alias میتونیم تایپهایی با اسم دلخواه بسازیم. نحوهٔ ساختن یک تایپ دلخواه با Type Alias به صورت زیر هست:
type ID = number; type Name = string;
توی کد بالا ما دو تا تایپ ساختیم. برای مثال اگه توی برنامهمون برای اسمها از تایپ Name استفاده کنیم، معنا و خوانایی بیشتری داره نسبت به تایپ string:
function sendMessage(user: Name) { }
تایپهای ما میتونن شکل پیچیدهتری هم به خودشون بگیرن:
type Person = { name: string; age: number; }
ما اینجا یک تایپ اختصاصی ساختیم به اسم Person که به صورت زیر میتونه به متغیرها، نوع پارامتر یا خروجی توابع نسبت داده بشه:
function updateUser(person: <<Person>>): <<Person>> { const newPerson = {...person}; newPerson.age++; return newPerson; } const mario: <<Person>> = { name: "Mario", age: 4, }; updateUser(mario);
اگه با اینترفیسهای آشنایی داشته باشید، میدونیم که تایپ بالا رو خیلی راحت میتونیم با یک اینترفیس هم بنویسیم:
interface Person { name: string; age: number; }
نحوهٔ استفاده از این اینترفیس هیچ تفاوتی با تایپی که ساختیم نداره و میتونه توی مثال بالا استفاده بشه. در واقع توی خیلی از جاها این دو ویژگی میتونن به همین شکل بجای همدیگه استفاده بشن. پس چه تفاوتهایی وجود داره؟
تفاوت اول: کار با مقادیر Primitive
این یکی از مهمترین تفاوتهای این دو ویژگی هست. تو مثالهای بالا دیدیم که ما تونستیم برای تایپ string یک تایپ با اسم دلخواه خودمون بسازیم. همونطور که میدونیم یک Primitive (مقدار غیر آبجکتی) هست و ما برای کار با مقادیر Primitive نمیتونیم از اینترفیسها استفاده کنیم. در واقع ما از اینترفیسها فقط میتونیم برای شکل دادن به آبجکتها استفاده کنیم. اما با Type Alias میتونیم هم برای مقادیر آبجکتی و هم Primitive ها تایپ دلخواه بسازیم:
