Menu
CoddyTech

Итоги: Тонкая настройка типов

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

challenge icon

Задание

Легко

Создайте систему управления конфигурацией, которая обрабатывает динамические настройки с использованием индексных сигнатур, защитников типов (type guards) и утверждений типов (type assertions).

Создайте интерфейс с именем AppConfig, который использует индексную сигнатуру для сопоставления строковых ключей со значениями типа string | number | boolean.

Создайте функцию с именем validateConfigValue, которая:

  • Принимает два параметра: config типа AppConfig и key типа string
  • Возвращает "missing", если ключ не существует в конфигурации
  • Использует защитники типов для проверки фактического типа значения
  • Возвращает "string", если значение является строкой
  • Возвращает "number", если значение является числом
  • Возвращает "boolean", если значение является логическим типом
  • Имеет явный тип возвращаемого значения string

Создайте функцию с именем getConfigAsString, которая:

  • Принимает два параметра: config типа AppConfig и key типа string
  • Возвращает "undefined", если ключ не существует
  • Использует утверждение типа, чтобы рассматривать значение как string, и возвращает его, если значение существует
  • Имеет явный тип возвращаемого значения string

Создайте функцию с именем processConfig, которая:

  • Принимает два параметра: config типа AppConfig и key типа string
  • Использует validateConfigValue для проверки типа
  • Возвращает значение, преобразованное в верхний регистр, если это строка
  • Возвращает значение, умноженное на 10, если это число
  • Возвращает противоположное логическое значение, если это логический тип
  • Возвращает null, если ключ отсутствует
  • Имеет явный тип возвращаемого значения string | number | boolean | null

Создайте тестовые данные:

  • Создайте settings типа AppConfig со следующими значениями:
    • "appName": "MyApp"
    • "version": 2.1
    • "debugMode": true
    • "maxUsers": 100
    • "theme": "dark"

Протестируйте свои функции и выведите следующие результаты:

  • Вызовите validateConfigValue с settings и "appName"
  • Вызовите validateConfigValue с settings и "version"
  • Вызовите validateConfigValue с settings и "debugMode"
  • Вызовите validateConfigValue с settings и "timeout"
  • Вызовите getConfigAsString с settings и "theme"
  • Вызовите getConfigAsString с settings и "missing"
  • Вызовите processConfig с settings и "appName"
  • Вызовите processConfig с settings и "maxUsers"
  • Вызовите processConfig с settings и "debugMode"
  • Вызовите processConfig с settings и "invalid"

Попробуйте сами

// TODO: Напишите свой код здесь

// Создайте интерфейс AppConfig


// Создайте функцию validateConfigValue


// Создайте функцию getConfigAsString


// Создайте функцию processConfig


// Создайте тестовые данные — объект settings


// Протестируйте функции и выведите результаты
console.log(validateConfigValue(settings, "appName"));
console.log(validateConfigValue(settings, "version"));
console.log(validateConfigValue(settings, "debugMode"));
console.log(validateConfigValue(settings, "timeout"));
console.log(getConfigAsString(settings, "theme"));
console.log(getConfigAsString(settings, "missing"));
console.log(processConfig(settings, "appName"));
console.log(processConfig(settings, "maxUsers"));
console.log(processConfig(settings, "debugMode"));
console.log(processConfig(settings, "invalid"));

Все уроки раздела Введение в TypeScript

Потренируйтесь самостоятельно: Песочница TypeScript