Интерфейсы против псевдонимов типов
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 40 из 73.
Теперь, когда вы узнали как о псевдонимах типов, так и об интерфейсах для определения структур объектов, важно понимать, когда использовать каждый из этих подходов. Хотя они служат схожим целям, существуют ключевые различия, которые могут повлиять на ваш выбор.
Сходства: Как интерфейсы, так и псевдонимы типов могут определять структуру объектов с одинаковым уровнем безопасности типов. Вы можете использовать любой из подходов для указания обязательных свойств, необязательных свойств и свойств readonly. Оба варианта также поддерживают расширение или объединение с другими типами.
Ключевое отличие — объединение объявлений: Самое значительное различие заключается в том, что интерфейсы поддерживают объединение объявлений (declaration merging), в то время как псевдонимы типов — нет. Это означает, что вы можете объявлять один и тот же интерфейс несколько раз, и TypeScript автоматически объединит все объявления в один интерфейс:
interface User {
name: string;
}
interface User {
age: number;
}
// TypeScript объединяет их в:
// interface User {
// name: string;
// age: number;
// }Если вы попробуете тот же подход с псевдонимами типов (type aliases), TypeScript выдаст ошибку о дублирующихся идентификаторах. Эта возможность слияния делает интерфейсы особенно полезными при работе с библиотеками или когда вам нужно расширить существующие определения типов в разных частях вашей кодовой базы.
Когда выбирать: Используйте интерфейсы при определении структуры объектов, которые могут нуждаться в расширении или объединении позже. Используйте псевдонимы типов, когда вам требуются более сложные операции с типами, такие как объединения, пересечения или при работе с примитивными типами.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в TypeScript
1Начало работы с TS
Что такое TypeScript?Зачем использовать TypeScript?Ваш первый код на TypeScriptПроцесс компиляции и ошибкиИтоги: Введение в TS4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация стрелочных функцийТип возвращаемого значения 'void'Необязательные параметры с '?'Значения параметров по умолчаниюТипизация Rest-параметровОпределение типов функцийИтоги: Создание типизированных функций2Основные типы
Базовые типы: str, num, booleanТип 'any': лазейкаТип 'unknown'Работа с 'null' и 'undef'Вывод типов в действииЯвные аннотации типовИтоги: Практика по основным типам5Типы: псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения ('|')Работа с типами объединенияЛитеральные типыТипы пересечения ('&')Комбинирование псевдонимов типовИтоги: продвинутые комбинации типов3Структуры данных: массивы и кортежи
Типизированные массивыМодификатор 'readonly' для массивовЧто такое кортеж?Объявление кортежей и доступ к нимДеструктуризация кортежейКортежи readonlyМногомерные типизированные массивыОператор spread с массивамиИтоги: массивы и кортежи6Типизация объектов и интерфейсы
Встроенные аннотации типов объектовПсевдонимы типов для объектовВведение в интерфейсыИнтерфейсы против псевдонимов типовНеобязательные и Readonly свойстваРасширение интерфейсов и типовДобавление методов в интерфейсыИтоги: Определение структуры объектовПотренируйтесь самостоятельно: Онлайн-компилятор JavaScript