Итоги: Тонкая настройка типов
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 73 из 73.
Задание
ЛегкоСоздайте систему управления конфигурацией, которая обрабатывает динамические настройки с использованием индексных сигнатур, защитников типов (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
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 с массивамиИтоги: массивы и кортежиПотренируйтесь самостоятельно: Песочница TypeScript