Back to questions
Middle
5
В чём разница между interface и type в TypeScript? Зачем нужны интерфейсы если есть типы и наоборот?
Companies where asked
Evrone
Answer from AI
sobes.tech AI
В TypeScript и interface, и type используются для описания формата данных, но между ними есть важные отличия.
-
interface предназначен для описания структуры объектов и может быть расширен (extends) или реализован (implements) классами. Интерфейсы поддерживают декларативное слияние (declaration merging), то есть можно объявить интерфейс с одним именем несколько раз, и TypeScript объединит их.
-
type — это более общий инструмент, который позволяет создавать алиасы для любых типов: примитивов, объединений, пересечений, кортежей и т.д. Типы нельзя расширять или реализовывать, и они не поддерживают декларативное слияние.
Зачем нужны оба?
- Интерфейсы удобны для описания контрактов объектов и классов, особенно когда важна расширяемость и декларативное слияние.
- Типы дают больше гибкости для сложных выражений типов, например, объединений или пересечений.
Пример:
interface IUser {
name: string;
}
interface IUser {
age: number; // интерфейсы сливаются
}
const user: IUser = { name: "Alice", age: 30 };
// type так не сработает
// type User = { name: string };
// type User = { age: number }; // ошибка: Duplicate identifier 'User'
// type позволяет объединения
type ID = string | number;