Использование обобщенной функции
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 59 из 73.
Есть два способа использовать обобщённую функцию: с явными аргументами типа или позволив TypeScript автоматически вывести тип.
Вот как можно вызвать обобщённую функцию с явными аргументами типа:
const result1 = wrapInObject<string>("hello");
const result2 = wrapInObject<number>(42);<string> и <number> явно указывают TypeScript, какой тип использовать для T. Это даёт вам полный контроль над параметром типа.
Однако TypeScript достаточно умён, чтобы в большинстве случаев вывести тип из передаваемого вами аргумента:
const result1 = wrapInObject("hello"); // T inferred as string
const result2 = wrapInObject(42); // T inferred as numberВывод типов делает ваш код более чистым и понятным, сохраняя ту же безопасность типов. TypeScript анализирует аргумент и автоматически определяет, каким должен быть T, поэтому вам не нужно указывать явную аннотацию типа, если только вы не хотите переопределить выведенный тип.
Задание
ЛегкоВам предоставлено следующее из предыдущего задания:
- Обобщённая функция
wrapInObject<T>, которая принимает элемент типаTи возвращает{ value: T }
Вызовите функцию wrapInObject, используя явные аргументы типа и вывод типов:
Использование явных аргументов типа:
- Создайте переменную
explicitString, вызвавwrapInObject<string>со значением"TypeScript" - Создайте переменную
explicitNumber, вызвавwrapInObject<number>со значением25 - Создайте переменную
explicitBoolean, вызвавwrapInObject<boolean>со значениемfalse
Использование вывода типов:
- Создайте переменную
inferredString, вызвавwrapInObjectсо значением"Generics"(позвольте TypeScript вывести тип) - Создайте переменную
inferredNumber, вызвавwrapInObjectсо значением99(позвольте TypeScript вывести тип) - Создайте переменную
inferredBoolean, вызвавwrapInObjectсо значениемtrue(позвольте TypeScript вывести тип)
Выведите следующие результаты:
- Выведите
explicitString.value - Выведите
explicitNumber.value - Выведите
explicitBoolean.value - Выведите
inferredString.value - Выведите
inferredNumber.value - Выведите
inferredBoolean.value
Попробуйте сами
// Обобщённая функция из предыдущего задания
function wrapInObject<T>(item: T): { value: T } {
return { value: item };
}
// TODO: Напишите свой код здесь
// Создайте переменные, используя явные аргументы типов
// Создайте переменные, используя вывод типов
// Выведите результатыВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в 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