Что будет, если создать два интерфейса с одинаковым именем в одном файле

Ответ

TypeScript автоматически объединит (merge) оба интерфейса в один. Все свойства из обоих интерфейсов станут доступны в результирующем типе. Это называется "declaration merging".

Пример:

interface User {
  name: string;
}

interface User {
  age: number;
}

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

Важно:

  • Объединение работает только для интерфейсов, не для типов (type)
  • Если свойства совпадают, их типы должны быть идентичны
  • Можно объединять интерфейсы даже из разных файлов (при использовании модулей)

Ответ 18+ 🔞

А, ну это же классика, блядь! TypeScript, сука, такой хитрожопый, он может просто взять и склеить два интерфейса, которые ты назвал одинаково! Это называется, ёпта, «слияние объявлений» (declaration merging), звучит-то как, а?

Смотри, вот тебе живой пример, в рот меня чих-пых:

interface User {
  name: string;
}

interface User {
  age: number;
}

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

Видишь эту подлянку? Сначала мы сказали, что User — это только имя. А потом, блядь, как бы мимоходом, добавили: «А, ну и возраст тоже, да». И TypeScript, вместо того чтобы орать «Пидарас, шерстяной, ты уже это определял!», берёт и аккуратно склеивает эти две хуйни в один здоровенный интерфейс. В итоге у нашего user должны быть и name, и age. Удобно, чё.

Но, внимание, ёперный театр, есть важные нюансы, а то щас наебнёшься:

  1. Эта фишка работает только для интерфейсов (interface). Попробуй провернуть такое же с type — получишь по ебалу с ошибкой. Типы — не такие гибкие, блядь, максималисты.
  2. Если ты, мудак, в двух интерфейсах объявил одно и то же свойство, но с разными типами, то пиши пропало. TypeScript тебя нахуй пошлёт. Типы должны быть идентичными, иначе конфликт, пиздец и ничего не склеится.
  3. Самое охуенное — это можно делать даже в разных файлах! Разбросал объявления по проекту, а в итоге они всё равно сольются в одну кучу. Главное, чтобы области видимости совпадали, конечно.

Вот такие пироги, блядь. Инструмент мощный, но если использовать как попало — получится полная пиздопроебина.