Вопрос с собеседования · Frontend

Чем interface отличается от type в TypeScript и что такое утилитарные типы?

JuniorTypeScript
Ещё спрашивают так:
  • Что делают Partial, Pick, Omit, Record?
Коротко

Оба описывают форму объекта. interface — расширяется через extends и сливается при повторном объявлении (удобно для расширения чужих типов). type — умеет больше: объединения, пересечения, кортежи, условные и сопоставленные типы. Утилиты строят новые типы из существующих: Partial (всё необязательно), Required, Pick, Omit, Record, ReturnType.

  • Для объектов и публичных API часто выбирают interface, для остального — type
  • Дженерики: function first<T>(xs: T[]): T
  • keyof и индексные типы — основа утилит

А ещё Главное — единообразие в проекте

Подробно

Слияние объявлений. Два interface Window { ... } объединятся — так библиотеки добавляют поля в глобальные типы. Для type повторное объявление — ошибка.

Что умеет только type: объединения (A | B), примитивные псевдонимы, кортежи, условные типы (T extends U ? X : Y), шаблонные строковые типы.

Утилитарные типы реализованы через сопоставленные типы: Partial<T> = { [K in keyof T]?: T[K] }. Они избавляют от дублирования: тип формы редактирования выводится из модели, а не пишется заново.

Пример

interface User { id: number; name: string; email: string; }

type UserPatch = Partial<Omit<User, "id">>;      // всё, кроме id, необязательно
type UserPreview = Pick<User, "id" | "name">;
type ById = Record<number, User>;
type Status = "draft" | "published";             // только type

function update<T extends { id: number }>(item: T, patch: Partial<T>): T {
  return { ...item, ...patch };
}

Что хотят услышать

  • Сходства и различия interface и type.
  • Основные утилитарные типы.
  • Дженерики.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗type умеет сливаться при повторном объявлении, а interface — нет
  • ✗interface поддерживает объединения типов через |, а type — только объекты
  • ✓interface расширяется и сливается; type — объединения и условные типы; Partial, Pick, Omit
  • ✗Partial делает все поля обязательными

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования