Обобщенные интерфейсы
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 61 из 73.
Так же как вы можете создавать generic-функции, вы также можете создавать generic-интерфейсы. Это позволяет определить структуру объекта, сохраняя типы определённых свойств гибкими и пригодными для повторного использования.
Вот как создать обобщённый interface, используя тот же синтаксис параметра типа:
interface Container {
value: T;
isEmpty: boolean;
}<T> после имени интерфейса создаёт параметр типа, который можно использовать во всём определении интерфейса. В этом примере свойство value будет иметь тип, указанный при использовании интерфейса, а isEmpty останется фиксированным типом boolean.
Когда вы используете generic interface, вы указываете конкретный тип в угловых скобках:
const stringContainer: Container = {
value: "hello",
isEmpty: false
};
const numberContainer: Container = {
value: 42,
isEmpty: false
};Задание
ЛегкоСоздайте generic-интерфейс с именем Result, который может хранить данные любого типа вместе с информацией об успешности.
Интерфейс должен иметь два свойства:
successтипаbooleandataтипаT(параметр generic-типа)
Создайте следующие объекты, используя ваш generic-интерфейс:
stringResultтипаResult<string>со значениемsuccess: trueиdata: "Operation completed"numberResultтипаResult<number>со значениемsuccess: trueиdata: 42booleanResultтипаResult<boolean>со значениемsuccess: falseиdata: falsearrayResultтипаResult<string[]>со значениемsuccess: trueиdata: ["item1", "item2", "item3"]
Создайте generic-функцию с именем processResult, которая:
- Использует параметр generic-типа
T - Принимает один параметр
resultтипаResult<T> - Возвращает строковое сообщение
- Если
successимеет значениеtrue, возвращает"Success: [data]" - Если
successимеет значениеfalse, возвращает"Failed: [data]"
Выведите следующие результаты:
- Выведите результат вызова
processResultсstringResult - Выведите результат вызова
processResultсnumberResult - Выведите результат вызова
processResultсbooleanResult - Выведите результат вызова
processResultсarrayResult - Выведите
stringResult.data
Попробуйте сами
// TODO: Напишите ваш код здесь
// Создайте обобщённый интерфейс Result
// Создайте объекты, используя интерфейс Result
// Создайте обобщённую функцию processResult
// Выведите требуемые результатыВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в TypeScript
1Начало работы с TS
Что такое TypeScript?Зачем использовать TypeScript?Ваш первый код на TypeScriptПроцесс компиляции и ошибкиИтоги: Введение в TS4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация стрелочных функцийТип возвращаемого значения 'void'Необязательные параметры с '?'Значения параметров по умолчаниюТипизация Rest-параметровОпределение типов функцийИтоги: Создание типизированных функций2Основные типы
Базовые типы: str, num, booleanТип 'any': лазейкаТип 'unknown'Работа с 'null' и 'undef'Вывод типов в действииЯвные аннотации типовИтоги: Практика по основным типам5Типы: псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения ('|')Работа с типами объединенияЛитеральные типыТипы пересечения ('&')Комбинирование псевдонимов типовИтоги: продвинутые комбинации типов3Структуры данных: массивы и кортежи
Типизированные массивыМодификатор 'readonly' для массивовЧто такое кортеж?Объявление кортежей и доступ к нимДеструктуризация кортежейКортежи readonlyМногомерные типизированные массивыОператор spread с массивамиИтоги: массивы и кортежи6Типизация объектов и интерфейсы
Встроенные аннотации типов объектовПсевдонимы типов для объектовВведение в интерфейсыИнтерфейсы против псевдонимов типовНеобязательные и Readonly свойстваРасширение интерфейсов и типовДобавление методов в интерфейсыИтоги: Определение структуры объектов9Обобщения: первое знакомство
Проблема, которую решают обобщенияСоздание обобщенной функции IdentityИспользование обобщенной функцииОбобщенные массивыОбобщенные интерфейсыИтоги: практика по обобщенным функциямПотренируйтесь самостоятельно: Онлайн-компилятор JavaScript