تفاوت Interface و Type در تایپ اسکریپت چیست؟

تعریف نوع ها با interface و type چه فرقی می کند؟ برای مثال:

interface User {
  id: number
  name: string
}

// یا

type User = {
  id: number
  name: string
}

1 پاسخ
37
یک برنامه‌نویس
یک برنامه‌نویس @a_programmer
محتوای آموزشی پیرامون برنامه نویسی
7 ماه قبل

اینترفیس (Interface) و نام مستعار (Type Alias) بسیار شبیه هم هستند و در بسیاری از موارد به طور دلخواه می توانیم هر کدام را که خواستیم انتخاب کنیم. تفاوت مهمی که وجود دارد: در صورتی که از type استفاده کنیم امکان اضافه کردن ویژگی های بیشتر به آن وجود ندارد ولی interface همیشه قابل گسترش (extendable) است و می توانیم بعدا ویژگی های بیشتری به نوع موردنظر اضافه کنیم. برای مثال:

نحوه extend کردن type:

type Animal = {
  name: string
}

type Bear = Animal & { 
  honey: boolean 
}

const bear = getBear();
bear.name;
bear.honey;

نحوه extend کردن interface:

interface Animal {
  name: string
}

interface Bear extends Animal {
  honey: boolean
}

const bear = getBear() 
bear.name
bear.honey

بعد از تعریف type امکان تغییر آن نیست:

type Window = {
  title: string
}

type Window = {
  items: string[]
}

// خطا! نام نوع تکراری است

افزودن فیلد جدید به interface ممکن است:

interface Window {
  title: string
}

interface Window {
  items: string[]
}

window.items.join(' ') // اوکی