> Что такое интерфейсы и типы в TypeScript, для чего они нужны и чем отличаются? (TypeScript)
Уровень: junior · Роль: frontend · Категория: Технические вопросы
Компании: Иннотех, Инрэко, Точка, Kvando Technologies, Soft_Media_Group, ООО Премиум ИТ Солюшен, Kodix, Aston, The Tribe, ЛОЦИЯ, Swetec, DigitalSail, EdenAI, TYMY
Стек: TypeScript
> Пример ответа
Короткий ответ
Интерфейсы и типы в TypeScript - это способы описания структуры данных. Интерфейсы (interface) задают контракт для объектов и классов, поддерживают объединение (extends) и слияние деклараций. Типы (type) более гибкие: могут описывать примитивы, union, intersection, кортежи. Основное отличие: интерфейсы расширяемы (их можно переобъявлять), а типы - нет. Для объектов обычно выбирают interface, для сложных комбинаций - type.
Подробное объяснение
Интерфейсы и типы служат для статической типизации, но имеют разные возможности. Интерфейсы создаются через interface и могут быть расширены другими интерфейсами через extends. Они поддерживают declaration merging - если объявить два интерфейса с одним именем, TypeScript объединит их. Интерфейсы могут описывать только объекты и функции.
Типы создаются через type и могут представлять любые типы: примитивы (type ID = string), union (type Status = 'active' | 'inactive'), intersection (type A = B & C), кортежи, mapped types. Типы не поддерживают declaration merging - повторное объявление с тем же именем вызовет ошибку.
Ключевое различие: интерфейсы - это "контракты", которые можно расширять, а типы - это "алиасы" для любых форм данных. Для объектов в публичных API предпочтительнее интерфейсы из-за расширяемости.
На практике
Для описания props компонентов React, моделей данных, ответов API обычно используют интерфейсы - они дают понятные ошибки в IDE и позволяют расширять типы. Типы применяют для union-типов (например, type ButtonVariant = 'primary' | 'secondary'), для комбинаций через intersection, для условных типов. Если нужно описать функцию с перегрузкой - используют интерфейс. Для кортежей или маппинга - type.
Пример кода
TYPESCRIPT// Интерфейс для объектаinterface User {id: number;name: string;}// Расширение интерфейсаinterface AdminUser extends User {role: 'admin';}// Тип для uniontype Status = 'active' | 'inactive';// Тип для intersectiontype DetailedUser = User & { createdAt: Date };// Тип для кортежаtype Pair = [string, number];// Declaration merging интерфейсовinterface User {email?: string; // добавили поле без ошибки}// Повторное объявление type вызовет ошибку// type Status = 'pending'; // Error: Duplicate identifier
Как отвечать на собеседовании
Начни с простого определения: оба механизма для описания типов. Затем перечисли ключевые отличия: расширяемость интерфейсов (extends и declaration merging) против гибкости типов (union, intersection, примитивы). Приведи примеры использования: интерфейсы для объектов и классов, типы для сложных комбинаций. Упомяни, что для публичных API предпочтительны интерфейсы. Если спросят про производительность - скажи, что разница минимальна, но интерфейсы могут быть быстрее при проверке типов.
Что проверяет интервьюер
Интервьюер оценивает понимание базовых концепций TypeScript: статическая типизация, различие между интерфейсом и типом, знание declaration merging, умение выбирать подходящий инструмент под задачу. Также проверяется способность объяснить trade-offs: интерфейсы расширяемы, но менее гибки; типы гибки, но не расширяемы.
Типичные ошибки
- Говорить, что интерфейсы и типы - это одно и то же.
- Не упоминать declaration merging у интерфейсов.
- Использовать type для объектов, когда нужен interface (особенно в библиотеках).
- Путать extends (для интерфейсов) и intersection (&) для типов.
- Думать, что типы нельзя расширять - можно через intersection, но это не то же самое.
> Похожие задачи по frontend
Что такое типы any и unknown в TypeScript
Как сделать функцию getProperty с типизацией и проверкой ключей в TypeScript?
Что такое TypeScript
Можно ли создать константу с несуществующим типом в TypeScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью