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

Расскажи про типы данных в TypeScript, утилити типы, отличие типов от интерфейсов, наследование в них.

Компании, где спрашивали
RWB

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

sobes.tech AI

В TypeScript есть несколько основных типов данных: примитивы (string, number, boolean, null, undefined, symbol, bigint), массивы, кортежи, enum, any, unknown, void, never и объекты.

Утилити типы — это встроенные типы, которые помогают трансформировать другие типы. Например:

  • Partial<T> — делает все свойства типа T необязательными.
  • Readonly<T> — делает все свойства типа T только для чтения.
  • Pick<T, K> — выбирает подмножество свойств из T.
  • Omit<T, K> — исключает свойства из T.
  • Record<K, T> — создает объект с ключами K и значениями T.

Отличие типов (type) от интерфейсов (interface):

  • Интерфейсы предназначены для описания структуры объектов и могут быть расширены (наследованы) и объединены.
  • Типы более универсальны, могут описывать не только объекты, но и объединения, пересечения, примитивы и т.д.
  • Интерфейсы могут быть декларативно объединены (declaration merging), типы — нет.

Наследование:

  • Интерфейсы наследуются с помощью ключевого слова extends:
interface Animal {
  name: string;
}
interface Dog extends Animal {
  breed: string;
}
  • Типы могут использовать пересечения для объединения:
type Animal = { name: string };
type Dog = Animal & { breed: string };

Таким образом, интерфейсы удобны для описания объектов и их расширения, а типы — более гибкие и мощные для сложных комбинаций типов.