В чем разница между типом и интерфейсом в 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