Sobes.tech
Назад к вопросам
Middle
5

В чём разница между type и interface в TypeScript?

Компании, где спрашивали
МВидео/эльдорадо

Ответ от нейросети

sobes.tech AI

В TypeScript type и interface часто используются для описания типов объектов, но между ними есть отличия:

  • Расширяемость:

    • interface можно расширять (extends) и объединять (declaration merging), то есть несколько объявлений с одним именем интерфейса объединяются.
    • type не поддерживает declaration merging, но можно создавать объединения и пересечения типов.
  • Возможности:

    • type более универсален — позволяет описывать не только объекты, но и объединения, пересечения, примитивы, кортежи и т.д.
    • interface предназначен только для описания структур объектов и классов.
  • Синтаксис и предпочтения:

    • interface часто предпочтительнее для описания публичных API и классов, так как поддерживает декларативное расширение.
    • type удобен для сложных типов, например, объединений или mapped types.

Пример:

interface IUser {
  name: string;
}

interface IUser {
  age: number; // интерфейсы объединятся
}

const user: IUser = { name: 'Alice', age: 30 };

// type так не сработает:
// type User = { name: string };
// type User = { age: number }; // ошибка: Duplicate identifier 'User'

// type позволяет объединения:
type ID = string | number;