> Можно ли создать два интерфейса или типа с одинаковым именем, но разным описанием в TypeScript (JavaScript)

Уровень: middle · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы

Компании: TrendTech

Стек: Node.js, JavaScript, TypeScript

> Пример ответа

Да, в TypeScript можно объявить два интерфейса с одинаковым именем - это называется декларативное слияние (declaration merging). TypeScript автоматически объединит их описания в один интерфейс.

Пример:

TYPESCRIPT
interface User {
name: string;
}
interface User {
age: number;
}
// Результирующий интерфейс: { name: string; age: number; }
const user: User = { name: "Alice", age: 30 }; // OK

Однако для типов (type) такое невозможно - повторное объявление типа с тем же именем вызовет ошибку:

TYPESCRIPT
type User = { name: string };
type User = { age: number }; // Ошибка: Duplicate identifier 'User'

Исключение: если типы определены в разных модулях (файлах), они не конфликтуют, так как каждый модуль имеет свою область видимости. Но в рамках одного модуля или глобальной области дублирование типа запрещено.

Таким образом, для интерфейсов слияние - это осознанная фича (часто используется для расширения сторонних типов, например, в express), а для типов - ошибка.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью