Ответ
И type, и interface используются для описания форм объектов, но имеют ключевые различия в возможностях и сценариях использования.
interface:
- Основная цель: Описание формы объекта, особенно в контексте ООП и контрактов.
- Расширение: Использует ключевое слово
extends.interface User { name: string; } interface Admin extends User { permissions: string[]; } - Объявление слияния (Declaration Merging): Интерфейсы с одним именем автоматически объединяются. Это полезно для расширения типов из сторонних библиотек.
interface Window { title: string; } interface Window { ts: TypeScriptAPI; } // Результат: Window { title: string; ts: TypeScriptAPI; } - Имплементация: Классы могут реализовывать (
implements) интерфейсы.
type (псевдоним типа):
- Основная цель: Создание псевдонима для любого типа, включая примитивы, объединения, пересечения и кортежи.
- Расширение: Использует пересечение (
&).type User = { name: string }; type Admin = User & { permissions: string[] }; - Продвинутые типы: Может определять типы, которые невозможно выразить через
interface.// Union тип type Status = 'success' | 'error' | 'pending'; // Tuple тип type Point = [number, number]; // Mapped Types type Readonly<T> = { readonly [P in keyof T]: T[P] };
Что использовать?
- Используйте
interface, когда:- Работаете с объектами/классами в стиле ООП.
- Вам может понадобиться объявление слияния (например, при написании деклараций).
- Используйте
type, когда:- Нужен union, intersection, mapped type или кортеж.
- Определяете псевдоним для примитива.
На практике для описания объектов разница часто несущественна, и выбор может быть делом вкуса, но понимание этих различий важно для сложных сценариев.
Видео-ответы
▶