Утверждения типов
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 68 из 73.
Иногда TypeScript не располагает достаточной информацией, чтобы определить точный тип значения, но вы, как разработчик, знаете, чем это значение является на самом деле. Утверждения типов позволяют сообщить TypeScript: «поверьте мне, я знаю, что это значение имеет именно этот тип».
TypeScript предоставляет два синтаксиса для утверждений типов. Синтаксис as является более распространённым подходом:
let data: unknown = '{"name": "John", "age": 30}';
let user = data as string;Также можно использовать синтаксис с угловыми скобками, хотя в современном TypeScript он встречается реже:
let data: unknown = '{"name": "John", "age": 30}';
let user = <string>data;Задание
ЛегкоСоздай функцию, которая обрабатывает данные из имитации внешнего API. Ты будешь работать со значениями типа unknown и использовать утверждения типов для безопасного доступа к их свойствам.
Создай переменную apiResponse типа unknown и присвой ей следующую строку JSON:
{"userId": 42, "username": "alice_dev", "isActive": true}Создай функцию с именем processUserData, которая:
- Принимает параметр
dataтипаunknown - Использует утверждение типа, чтобы рассматривать
dataкакstring - Разбирает строку JSON с помощью
JSON.parse() - Использует ещё одно утверждение типа, чтобы рассматривать разобранный результат как объект со свойствами
userId(number),username(string) иisActive(boolean) - Возвращает отформатированную строку:
"User [userId]: [username] (Active: [isActive])" - Имеет явный возвращаемый тип
string
Создай дополнительные тестовые данные:
- Создай
secondApiResponseтипаunknownсо строкой JSON:{"userId": 15, "username": "bob_admin", "isActive": false} - Создай
thirdApiResponseтипаunknownсо строкой JSON:{"userId": 99, "username": "charlie_user", "isActive": true}
Протестируй свою функцию и выведи следующие результаты:
- Вызови
processUserDataсapiResponseи выведи результат - Вызови
processUserDataсsecondApiResponseи выведи результат - Вызови
processUserDataсthirdApiResponseи выведи результат
Попробуйте сами
// Создать переменные ответа API
const apiResponse: unknown = '{"userId": 42, "username": "alice_dev", "isActive": true}';
const secondApiResponse: unknown = '{"userId": 15, "username": "bob_admin", "isActive": false}';
const thirdApiResponse: unknown = '{"userId": 99, "username": "charlie_user", "isActive": true}';
// TODO: Создать функцию processUserData здесь
// Протестировать функцию и вывести результаты
console.log(processUserData(apiResponse));
console.log(processUserData(secondApiResponse));
console.log(processUserData(thirdApiResponse));В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в TypeScript
1Начало работы с TS
Что такое TypeScript?Зачем использовать TypeScript?Ваш первый код на TypeScriptПроцесс компиляции и ошибкиИтоги: Введение в TS4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация стрелочных функцийТип возвращаемого значения 'void'Необязательные параметры с '?'Значения параметров по умолчаниюТипизация Rest-параметровОпределение типов функцийИтоги: Создание типизированных функций2Основные типы
Базовые типы: str, num, booleanТип 'any': лазейкаТип 'unknown'Работа с 'null' и 'undef'Вывод типов в действииЯвные аннотации типовИтоги: Практика по основным типам5Типы: псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения ('|')Работа с типами объединенияЛитеральные типыТипы пересечения ('&')Комбинирование псевдонимов типовИтоги: продвинутые комбинации типов8Перечисления (Enums)
Что такое числовое перечисление?Использование числовых перечисленийЧто такое строковое перечисление?Использование строковых перечисленийГетерогенные перечисленияИтоги: использование перечислений11Продвинутые темы
Утверждения типовType Guards: in и instanceofТип 'never'Nullable-типы ('strictNull')Индексные сигнатуры для объектовИтоги: Тонкая настройка типов3Структуры данных: массивы и кортежи
Типизированные массивыМодификатор 'readonly' для массивовЧто такое кортеж?Объявление кортежей и доступ к нимДеструктуризация кортежейКортежи readonlyМногомерные типизированные массивыОператор spread с массивамиИтоги: массивы и кортежиПотренируйтесь самостоятельно: Онлайн-компилятор JavaScript