Type и Interface: основы
В TypeScript две конструкции для описания формы объекта: type и interface. Обе создают именованный тип, но с разными возможностями.
Объявление
type User = {
name: string;
age: number;
};
interface User {
name: string;
age: number;
}
Результат один и тот же: User описывает объект с полями name и age.
Использование
const user: User = { name: 'Алиса', age: 25 };
function greet(user: User) {
return `Привет, ${user.name}`;
}
Алиасы
type может описать что угодно, не только объект:
type ID = string | number;
type Status = 'idle' | 'loading' | 'success';
type Pair = [string, number];
type Handler = (event: Event) => void;
interface — только форму объекта.
Когда что использовать
interface:
- Публичные API
- Классы (
implements) - Расширение существующих типов (declaration merging)
type:
- Union, кортежи, примитивы
- Условные и маппированные типы
- Функции
- Всё, что не форма объекта
Разница в расширении
// interface — через extends
interface Animal {
name: string;
}
interface Dog extends Animal {
breed: string;
}
// type — через пересечение
type Animal = { name: string };
type Dog = Animal & { breed: string };
Оба работают. Синтаксис разный.
Рекомендация
В одном проекте — один стиль. Многие современные проекты выбирают type из-за гибкости. Некоторые используют interface для объектов и type для всего остального.
Главное — не смешивать без причины.