Обобщенные интерфейсы
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 61 из 73.
Так же, как вы можете создавать обобщённые функции, вы также можете создавать обобщённые интерфейсы. Это позволяет определить структуру объекта, сохраняя при этом типы определённых свойств гибкими и пригодными для повторного использования.
Вот как создать обобщённый интерфейс, используя тот же синтаксис параметров типа:
interface Container<T> {
value: T;
isEmpty: boolean;
}<T> после имени интерфейса создаёт параметр типа, который можно использовать во всём определении интерфейса. В этом примере свойство value будет иметь любой тип, указанный при использовании интерфейса, а isEmpty останется фиксированным типом boolean.
Когда вы используете обобщённый интерфейс, вы указываете конкретный тип в угловых скобках:
const stringContainer: Container<string> = {
value: "hello",
isEmpty: false
};
const numberContainer: Container<number> = {
value: 42,
isEmpty: false
};Задание
ЛегкоСоздайте обобщённый интерфейс с именем Result, который может хранить данные любого типа вместе с информацией об успешности.
Интерфейс должен иметь два свойства:
successтипаbooleandataтипаT(параметр обобщённого типа)
Создайте следующие объекты, используя свой обобщённый интерфейс:
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"]
Создайте обобщённую функцию с именем processResult, которая:
- Использует параметр обобщённого типа
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Использование обобщенной функцииОбобщенные массивыОбобщенные интерфейсыИтоги: практика по обобщенным функциямПотренируйтесь самостоятельно: Песочница TypeScript