Получить доступ

Чем 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 и индексные типы — основа утилит

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Слияние объявлений. Два 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.
  • Основные утилитарные типы.
  • Дженерики.

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем