TypeScript Academy · Урок

Интерфейс или тип: когда что использовать

Выбирайте между интерфейсом и типом в зависимости от задачи

Урок 4 из 413 шагов

«Интерфейс или тип: когда что использовать» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Добро пожаловать

И `interface`, и `type` описывают структуры объектов. Они похожи, но имеют важные различия. Этот урок поможет Вам выбрать подходящий вариант.

Сходства

Оба варианта могут описывать структуры объектов, включать необязательные свойства и свойства readonly, использоваться как типы параметров функций и поддерживать обобщения.
interface A { x: number; }
type B = { x: number; };
// Both describe the same shape

Ключевое различие: слияние объявлений

Интерфейсы поддерживают слияние объявлений. Псевдонимы типов — нет: повторное объявление псевдонима типа вызывает ошибку.
interface Config { host: string; }
interface Config { port: number; } // OK — merged

type Settings = { host: string; };
// type Settings = { port: number; }; // Error

Ключевое различие: объединения и пересечения

Псевдонимы типов могут описывать объединения, пересечения, примитивы и кортежи. Интерфейсы могут описывать только структуры объектов.
type ID = string | number;        // union — only with type
type Nullable<T> = T | null;       // union — only with type
type Point = [number, number];     // tuple — only with type

Ключевое различие: вычисляемые свойства

Псевдонимы типов могут использовать отображаемые и условные типы для вычисления своей структуры. Интерфейсы не могут использовать их непосредственно.
type ReadonlyUser = Readonly<{ name: string; age: number }>; // mapped type
type Keys = keyof User; // only with type

Использование интерфейса для контрактов классов

Интерфейсы естественным образом взаимодействуют с классами через `implements`. Это гарантирует, что класс предоставляет определённые свойства и методы.
interface Repository<T> {
  findById(id: number): T | null;
  save(item: T): void;
}
class UserRepo implements Repository<User> { /* ... */ }

Производительность: интерфейсы и типы

Внутри TypeScript кэширует проверки структур интерфейсов эффективнее, чем сложные выражения псевдонимов типов. Для больших типов объектов предпочитайте интерфейсы.

Различия в сообщениях об ошибках

При несовпадении типов интерфейсы часто показывают в ошибках имя интерфейса, тогда как псевдонимы типов показывают развёрнутую структуру. Ошибки интерфейсов обычно легче читать.

Официальная рекомендация TypeScript

Команда TypeScript рекомендует использовать `interface`, пока Вам не понадобятся возможности, требующие `type`. Это их документированная лучшая практика.

Согласованность в команде важнее всего

Многие команды выбирают один вариант и используют его повсюду для единообразия. Свободное смешивание обоих вариантов в одном проекте может запутать. Здесь помогает руководство по стилю.

Итоговая таблица выбора

Используйте interface для объектов, классов и расширения библиотек. Используйте type для объединений, пересечений, кортежей, примитивов, отображаемых типов и условных типов.
// interface
interface User { name: string; age: number; }

// type (union)
type ID = string | number;

// type (tuple)
type Coord = [number, number];

Быстрая проверка

Какая конструкция необходима для создания типа-объединения, например `string | number`?

Итоги

Используйте interface для структур объектов, контрактов классов и расширения библиотек. Используйте type для объединений, пересечений, кортежей и вычисляемых типов. Если Вы сомневаетесь, команда TypeScript рекомендует interface для структур объектов.
Можно начать бесплатно

Изучай TypeScript с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
101
Уроки
352

Часто задаваемые вопросы

Урок «Интерфейс или тип: когда что использовать» бесплатный?

Да — полный текст урока «Интерфейс или тип: когда что использовать» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Интерфейс или тип: когда что использовать»?

Выбирайте между интерфейсом и типом в зависимости от задачи Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Интерфейс или тип: когда что использовать»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Определение структуры объектов с помощью интерфейсов
  2. Псевдонимы типов для сложных типов
  3. Расширение и объединение интерфейсов
  4. Интерфейс или тип: когда что использовать
← Назад к TypeScript Academy