PassFront
  1. PassFront
  2. База знаний
  3. Типы и интерфейсы

В чем разница между типом и интерфейсом в TypeScript?

Типы и интерфейсы

`interface` и `type` оба описывают формы объектов, но type умеет больше видов типов, а interface поддерживает расширение и слияние объявлений.

Общее

interface UserI { name: string }
type UserT = { name: string };

Оба подходят для объектов, функций и классов (implements).

Только type

  • объединения: type Status = 'ok' | 'error';
  • кортежи: type Point = [number, number];
  • вычисляемые типы: type Keys = keyof User, mapped и условные типы;
  • псевдонимы примитивов.

Только interface

  • слияние объявлений — два interface Window с одним именем объединяются (так расширяют типы библиотек);
  • расширение через extends с понятными ошибками при конфликте полей (у type пересечение & может молча дать never).

Как выбирать

  • объектные формы и публичный API — interface (или по договорённости в команде);
  • объединения и вычисления — type.

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

Коротко для собеседования

type описывает любые типы (объединения, кортежи, вычисляемые), interface — только объектные формы, но поддерживает extends и слияние объявлений.

Подробнее: TypeScript Handbook — Differences Between Type Aliases and Interfaces

Другие вопросы раздела