👩‍💻 Разница между интерфейсами и типами в typescript Вопрос, который попался мне на собесе и мне не удалось его полностью раскрыть. Давайте попробуем разобраться в основных отличиях.

1. Синтаксическое отличие.

Объявление через ключевые слова interface и type.

Интерфейсы в ts: `interface User { name: string; age: number; }

Типы в ts: `type User = { name: string; age: number; };

2. Расширение

Интерфейсы могут расширять другие интерфейсы с помощью ключевого слова extends

`interface Person { name: string; }

interface User extends Person { age: number; }

Типы могут быть объединены с помощью операторов & (пересечение).

`type Person = { name: string; };

type User = Person & { age: number; };

3. Объединение и пересечение

Интерфейсы не поддерживают объединение (|) или пересечение (&) напрямую. Они могут только расширять другие интерфейсы.

Типы поддерживают объединение и пересечение:

`type A = { a: string }; type B = { b: number }; type C = A | B; // Объединение type D = A & B; // Пересечение

4. Декларативное слияние

Интерфейсы поддерживают декларативное слияние. Если вы объявляете два интерфейса с одинаковым именем, они автоматически объединяются.

`interface User { name: string; }

interface User { age: number; }

const user: User = { name: "John", age: 30, };

Типы не поддерживают декларативное слияние. Если вы попытаетесь объявить два типа с одинаковым именем, это вызовет ошибку.

5. Использование с примитивами

Интерфейсы не могут быть использованы для описания примитивных типов. Типы могут описывать примитивные типы, объединения и другие сложные структуры

6. Использование в классах

Интерфейсы могут быть реализованы классами с помощью ключевого слова implements.

`interface Person { name: string; greet(): void; }

class User implements Person { name: string; constructor(name: string) { this.name = name; } greet() { console.log(Hello, ${this.name}); } }

Типы не могут быть реализованы классами напрямую.```````