Комбинирование псевдонимов типов
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 35 из 73.
Одним из наиболее мощных аспектов псевдонимов типов является их способность комбинироваться и использоваться повторно для создания более сложных определений типов. Вместо того чтобы каждый раз определять сложные типы с нуля, вы можете создавать их, компонуя вместе более мелкие и узкоспециализированные псевдонимы типов.
Этот подход способствует повторному использованию кода и делает определения типов более удобными в сопровождении. Когда вам нужно обновить базовый тип, все составные типы, которые его используют, автоматически наследуют изменения:
type Email = string;
type Phone = number;
type Contact = {
name: string;
email: Email;
phone: Phone;
};Вы также можете комбинировать псевдонимы типов внутри объединений типов для создания гибких структур данных. Это особенно полезно, когда свойство объекта может принимать различные форматы:
type ContactMethod = Email | Phone;
type User = {
id: number;
preferredContact: ContactMethod;
};Этот композиционный подход делает ваш код более выразительным и понятным. Вместо того чтобы видеть общие типы, такие как string или number, другие разработчики сразу понимают предназначение через осмысленные имена типов, такие как Email и Phone.
Задание
ЛегкоСоздайте псевдоним типа с именем Username для типа string.
Создайте псевдоним типа с именем UserAge для типа number.
Создайте псевдоним типа с именем ContactMethod, который объединяет Username и UserAge с помощью объединения типов (union type).
Создайте псевдоним типа с именем UserProfile для объекта со следующими свойствами:
idтипаnumberdisplayNameтипаUsernamepreferredContactтипаContactMethod
Создайте псевдоним типа с именем AdminProfile, который объединяет UserProfile с дополнительным типом объекта, содержащим свойство permissions типа string, используя пересечение типов (intersection types).
Теперь создайте следующие переменные:
- Создайте переменную с именем
regularUserтипаUserProfileс id1, displayName"john_doe"и preferredContact"john_doe" - Создайте переменную с именем
systemAdminтипаAdminProfileс id2, displayName"admin", preferredContact25и permissions"full_access"
Создайте функцию с именем getContactInfo, которая принимает параметр contact типа ContactMethod и возвращает string. Используйте сужение типов (type guard), чтобы проверить тип и вернуть:
- Если это строка:
"Contact: [contact]" - Если это число:
"Age: [contact]"
Выведите следующие результаты в отдельных строках:
- Вызовите
getContactInfoсregularUser.preferredContactи выведите результат - Вызовите
getContactInfoсsystemAdmin.preferredContactи выведите результат - Выведите
systemAdmin.permissions
Попробуйте сами
// TODO: Напишите свой код здесь
// Создайте псевдонимы типов для Username, UserAge, ContactMethod, UserProfile и AdminProfile
// Создайте переменные regularUser и systemAdmin
// Создайте функцию getContactInfo
// Выведите необходимые результатыВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в TypeScript
1Начало работы с TS
Что такое TypeScript?Зачем использовать TypeScript?Ваш первый код на TypeScriptПроцесс компиляции и ошибкиИтоги: Введение в TS4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация стрелочных функцийТип возвращаемого значения 'void'Необязательные параметры с '?'Значения параметров по умолчаниюТипизация Rest-параметровОпределение типов функцийИтоги: Создание типизированных функций2Основные типы
Базовые типы: str, num, booleanТип 'any': лазейкаТип 'unknown'Работа с 'null' и 'undef'Вывод типов в действииЯвные аннотации типовИтоги: Практика по основным типам5Типы: псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения ('|')Работа с типами объединенияЛитеральные типыТипы пересечения ('&')Комбинирование псевдонимов типовИтоги: продвинутые комбинации типов3Структуры данных: массивы и кортежи
Типизированные массивыМодификатор 'readonly' для массивовЧто такое кортеж?Объявление кортежей и доступ к нимДеструктуризация кортежейКортежи readonlyМногомерные типизированные массивыОператор spread с массивамиИтоги: массивы и кортежиПотренируйтесь самостоятельно: Онлайн-компилятор JavaScript