Итоги: продвинутые комбинации типов
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 36 из 73.
Задание
ЛегкоСоздайте псевдоним типа с именем Success для объекта со свойством status литерального типа "success" и свойством data типа any.
Создайте псевдоним типа с именем Failure для объекта со свойством status литерального типа "error" и свойством message типа string.
Создайте псевдоним типа с именем Result, который является объединением типов Success и Failure.
Создайте функцию с именем processResult, которая принимает параметр result типа Result и возвращает string. Функция должна использовать проверку типа (type guard) для свойства status, чтобы определить тип результата, и вести себя следующим образом:
- Если статус равен
"success", вернуть"Operation successful: [data]" - Если статус равен
"error", вернуть"Operation failed: [message]"
Создайте еще одну функцию с именем handleApiResponse, которая принимает параметр response типа Result и возвращает boolean. Функция должна возвращать true, если операция прошла успешно, и false, если она завершилась ошибкой.
Будут предоставлены следующие входные данные:
- Первый ввод: строка JSON, представляющая либо успешный результат, например
{"status": "success", "data": "User created"}, либо результат ошибки, например{"status": "error", "message": "Invalid credentials"} - Второй ввод: еще одна строка JSON в том же формате
Распарсите оба входных JSON-объекта как объекты типа Result, затем:
- Вызовите
processResultс первым распарсенным результатом и выведите возвращенную строку - Вызовите
handleApiResponseс первым распарсенным результатом и выведите возвращенное логическое значение - Вызовите
processResultсо вторым распарсенным результатом и выведите возвращенную строку - Вызовите
handleApiResponseсо вторым распарсенным результатом и выведите возвращенное логическое значение
Попробуйте сами
import * as readline from 'readline';
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const input: string[] = [];
// TODO: Напишите ваш код здесь
// 1. Создайте псевдонимы типов для Success, Failure и Result
// 2. Создайте функцию processResult
// 3. Создайте функцию handleApiResponse
rl.on('line', (line: string) => {
input.push(line.trim());
if (input.length === 2) {
// Разобрать входные данные JSON
const result1 = JSON.parse(input[0]);
const result2 = JSON.parse(input[1]);
// 4. Вызовите функции с разобранными результатами и выведите выходные данные
rl.close();
}
});Все уроки раздела Введение в TypeScript
1Начало работы с TS
Что такое TypeScript?Зачем использовать TypeScript?Ваш первый код на TypeScriptПроцесс компиляции и ошибкиИтоги: Введение в TS4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация стрелочных функцийТип возвращаемого значения 'void'Необязательные параметры с '?'Значения параметров по умолчаниюТипизация Rest-параметровОпределение типов функцийИтоги: Создание типизированных функций2Основные типы
Базовые типы: str, num, booleanТип 'any': лазейкаТип 'unknown'Работа с 'null' и 'undef'Вывод типов в действииЯвные аннотации типовИтоги: Практика по основным типам5Типы: псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения ('|')Работа с типами объединенияЛитеральные типыТипы пересечения ('&')Комбинирование псевдонимов типовИтоги: продвинутые комбинации типов3Структуры данных: массивы и кортежи
Типизированные массивыМодификатор 'readonly' для массивовЧто такое кортеж?Объявление кортежей и доступ к нимДеструктуризация кортежейКортежи readonlyМногомерные типизированные массивыОператор spread с массивамиИтоги: массивы и кортежиПотренируйтесь самостоятельно: Онлайн-компилятор JavaScript