Назад к вопросам
Middle
131
questionbank
Когда следует использовать типы, а когда интерфейсы в TypeScript?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Типы (type) следует использовать для:
- Объединений (unions) и пересечений (intersections):
type Status = "pending" | "completed" | "failed"; type UserWithAddress = User & Address; - Примитивных типов и литералов:
type ID = string | number; type Direction = "up" | "down" | "left" | "right"; - Кортежей (tuples):
type RgbColor = [number, number, number]; - Создания alias'ов для существующих типов:
type StringOrNumber = string | number; - Условных типов (conditional types):
type TypeOfProp<T, K extends keyof T> = T[K];
Интерфейсы (interface) следует использовать для:
- Описание структуры объектов:
interface User { id: number; name: string; age?: number; // Опциональное свойство } - Реализации классами (implements):
interface Logger { log(message: string): void; } class ConsoleLogger implements Logger { log(message: string) { console.log(message); } } - Расширения других интерфейсов (extends):
interface Person { name: string; } interface Employee extends Person { employeeId: number; } - Декларативного слияния (declaration merging): Это позволяет расширить существующий интерфейс, объявив его снова. С типами это невозможно.
interface Box { width: number; } interface Box { // Это добавит свойство height к интерфейсу Box height: number; }
Краткое сравнение:
| Особенность | type |
interface |
|---|---|---|
| Союзные типы | Да | Нет |
| Пересекающиеся типы | Да | Нет |
| Примитивные типы/Литералы | Да | Нет |
| Кортежи | Да | Нет |
| Alias'ы типов | Да | Нет |
| Условные типы | Да | Нет |
| Описание объектов | Да | Да |
| Реализация классами | Нет | Да |
| Расширение | Да (с использованием &) |
Да (с использованием extends) |
| Декларативное слияние | Нет | Да |
В целом, для описания структуры объектов предпочтительнее использовать interface, так как они лучше подходят для объектно-ориентированного подхода и поддерживают декларативное слияние. Для всего остального, особенно для комбинации и создания новых типов из существующих, type более гибок.