Проект: Универсальный предмет инвентаря
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 63 из 73.
Добро пожаловать в ваш первый проект на TypeScript! Вам предстоит создать универсальную систему управления инвентарем, которая продемонстрирует реальную мощь обобщений (generics). Этот проект покажет вам, как обобщения позволяют создавать гибкий, переиспользуемый код, который работает с различными типами данных, сохраняя при этом полную типобезопасность.
Основой любой системы инвентаризации является определение того, как выглядит единица товара. При традиционном подходе вы могли бы создавать отдельные интерфейсы для книг, электроники, одежды и других типов товаров. Но с помощью дженериков вы можете создать одну гибкую структуру, которая адаптируется к любым характеристикам товара.
Ваша первая задача — создать универсальный интерфейс под названием InventoryItem<T>. Этот интерфейс будет представлять общую структуру, которую разделяют все предметы инвентаря: им нужен id для идентификации, quantity для отслеживания уровня запасов и свойство details, которое может содержать любой тип информации о продукте.
Магия заключается в использовании параметра универсального типа T. Это делает свойство details абсолютно гибким — оно может содержать информацию о книге, технические характеристики электроники или любые другие данные о продукте — в то время как id и quantity во всех позициях инвентаря неизменно типизируются как числа.
Задание
ЛегкоСоздайте универсальный интерфейс (generic interface) с именем InventoryItem, который представляет структуру любого элемента инвентаря в вашей системе управления.
Интерфейс должен:
- Использовать параметр универсального типа
T - Иметь свойство
idтипаnumber - Иметь свойство
quantityтипаnumber - Иметь свойство
detailsтипаT
Создайте следующие объекты, используя ваш универсальный интерфейс:
bookItemтипаInventoryItem<{ title: string; author: string }>со следующими значениями:id: 1quantity: 5details: { title: "TypeScript Guide", author: "John Doe" }
electronicItemтипаInventoryItem<{ brand: string; model: string }>со следующими значениями:id: 2quantity: 3details: { brand: "TechCorp", model: "X200" }
clothingItemтипаInventoryItem<{ size: string; color: string }>со следующими значениями:id: 3quantity: 10details: { size: "M", color: "Blue" }
Выведите следующие значения:
- Выведите
bookItem.id - Выведите
bookItem.quantity - Выведите
bookItem.details.title - Выведите
bookItem.details.author - Выведите
electronicItem.details.brand - Выведите
electronicItem.details.model - Выведите
clothingItem.details.size - Выведите
clothingItem.details.color
Попробуйте сами
// TODO: Напишите свой код здесь
// Создайте интерфейс InventoryItem и необходимые объекты
// Выведите требуемые результаты
console.log(bookItem.id);
console.log(bookItem.quantity);
console.log(bookItem.details.title);
console.log(bookItem.details.author);
console.log(electronicItem.details.brand);
console.log(electronicItem.details.model);
console.log(clothingItem.details.size);
console.log(clothingItem.details.color);В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в TypeScript
1Начало работы с TS
Что такое TypeScript?Зачем использовать TypeScript?Ваш первый код на TypeScriptПроцесс компиляции и ошибкиИтоги: Введение в TS4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация стрелочных функцийТип возвращаемого значения 'void'Необязательные параметры с '?'Значения параметров по умолчаниюТипизация Rest-параметровОпределение типов функцийИтоги: Создание типизированных функций7Проект: Простой список задач
Проект: Определение структуры TaskФункция для добавления задачи10Проект: Управление инвентарем
Проект: Универсальный предмет инвентаряФункция: Добавление предметов в инвентарь2Основные типы
Базовые типы: str, num, booleanТип 'any': лазейкаТип 'unknown'Работа с 'null' и 'undef'Вывод типов в действииЯвные аннотации типовИтоги: Практика по основным типам5Типы: псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения ('|')Работа с типами объединенияЛитеральные типыТипы пересечения ('&')Комбинирование псевдонимов типовИтоги: продвинутые комбинации типов3Структуры данных: массивы и кортежи
Типизированные массивыМодификатор 'readonly' для массивовЧто такое кортеж?Объявление кортежей и доступ к нимДеструктуризация кортежейКортежи readonlyМногомерные типизированные массивыОператор spread с массивамиИтоги: массивы и кортежиПотренируйтесь самостоятельно: Песочница TypeScript