Menu
Coddy logo textTech

Итоги: продвинутые комбинации типов

Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 36 из 73.

challenge icon

Задание

Легко

Создайте псевдоним типа с именем 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

Потренируйтесь самостоятельно: Онлайн-компилятор JavaScript