Back to questions
Middle
4
В чём разница между type и interface в TypeScript? Плюсы и минусы каждого?
Companies where asked
Premium IT Solution
Answer from AI
sobes.tech AI
В TypeScript type и interface используются для описания типов, но имеют различия и особенности.
interface:
- Предназначен для описания структуры объектов и классов.
- Поддерживает декларативное расширение (declaration merging), то есть можно объявить интерфейс с одним именем в нескольких местах, и они объединятся.
- Можно расширять другие интерфейсы через
extends. - Используется для описания контрактов, особенно в ООП.
type:
- Более универсален, позволяет описывать не только объекты, но и объединения, пересечения, примитивы, кортежи и т.д.
- Не поддерживает декларативное расширение (не может быть объявлен несколько раз с объединением).
- Можно создавать сложные типы с помощью операторов
|,&.
Плюсы и минусы:
| Особенность | interface | type |
|---|---|---|
| Расширение | Да, через extends и merging | Да, через пересечения (&), но без merging |
| Универсальность | Только объекты и классы | Любые типы (примитивы, объединения, кортежи) |
| Декларативное объединение | Да | Нет |
Когда что использовать:
- Если нужно описать структуру объекта или класс, лучше использовать
interface. - Если нужен сложный тип (объединение, пересечение, примитивы), лучше
type. - Для расширяемых API удобнее
interface.
Пример:
interface IUser {
name: string;
}
interface IUser {
age: number; // интерфейсы объединятся
}
const user: IUser = { name: "Alice", age: 30 };
// type не поддерживает объединение
// type User = { name: string };
// type User = { age: number }; // ошибка
// type для объединения
type ID = string | number;