Ответ
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. Удобно, чё.
Но, внимание, ёперный театр, есть важные нюансы, а то щас наебнёшься:
- Эта фишка работает только для интерфейсов (
interface). Попробуй провернуть такое же сtype— получишь по ебалу с ошибкой. Типы — не такие гибкие, блядь, максималисты. - Если ты, мудак, в двух интерфейсах объявил одно и то же свойство, но с разными типами, то пиши пропало. TypeScript тебя нахуй пошлёт. Типы должны быть идентичными, иначе конфликт, пиздец и ничего не склеится.
- Самое охуенное — это можно делать даже в разных файлах! Разбросал объявления по проекту, а в итоге они всё равно сольются в одну кучу. Главное, чтобы области видимости совпадали, конечно.
Вот такие пироги, блядь. Инструмент мощный, но если использовать как попало — получится полная пиздопроебина.