Тип 'never'
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 70 из 73.
Тип never представляет значения, которые никогда не возникают. Поначалу это может показаться запутанным, но на самом деле это вполне логично, если подумать об определенных сценариях в вашем коде.
Тип never наиболее часто используется для функций, которые никогда не возвращают управление обычным способом.
Это включает в себя функции, которые всегда вызывают ошибку или содержат бесконечные циклы:
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {
// Этот цикл никогда не заканчивается
}
}В отличие от void, который указывает на то, что функция не возвращает значимого значения, never указывает на то, что функция вообще никогда не достигает своей конечной точки. Выполнение либо прекращается из-за выброшенной ошибки, либо продолжается бесконечно.
Задание
ЛегкоСоздайте функцию с именем throwError, которая демонстрирует тип возвращаемого значения never, всегда выбрасывая ошибку и никогда не возвращаясь обычным способом.
Функция должна:
- Принимать параметр
messageтипаstring - Выбрасывать новую
Errorс предоставленным сообщением - Иметь явно указанный тип возвращаемого значения
never
Создайте вторую функцию с именем handleOperation, которая:
- Принимает два параметра:
operationтипаstringиvalueтипаnumber - Возвращает
value * 2, если operation равна"double" - Возвращает
value / 2, если operation равна"half" - Вызывает
throwErrorс сообщением"Invalid operation: [operation]"для любой другой операции - Имеет явно указанный тип возвращаемого значения
number
Протестируйте свои функции со следующими операциями:
- Вызовите
handleOperation("double", 5)и выведите результат - Вызовите
handleOperation("half", 8)и выведите результат - Вызовите
handleOperation("triple", 3)и выведите результат (это вызовет ошибку)
Создайте дополнительные тестовые случаи:
- Вызовите
handleOperation("double", 15)и выведите результат - Вызовите
handleOperation("half", 20)и выведите результат
Попробуйте сами
// TODO: Напишите свой код здесь
// Создайте функцию throwError с типом возвращаемого значения never
// Создайте функцию handleOperation с типом возвращаемого значения number
// Протестируйте функции с помощью блоков try-catch
try {
console.log(handleOperation("double", 5));
} catch (error) {
console.log(`Error: ${(error as Error).message}`);
}
try {
console.log(handleOperation("half", 8));
} catch (error) {
console.log(`Error: ${(error as Error).message}`);
}
try {
console.log(handleOperation("triple", 3));
} catch (error) {
console.log(`Error: ${(error as Error).message}`);
}
try {
console.log(handleOperation("double", 15));
} catch (error) {
console.log(`Error: ${(error as Error).message}`);
}
try {
console.log(handleOperation("half", 20));
} catch (error) {
console.log(`Error: ${(error as Error).message}`);
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в TypeScript
1Начало работы с TS
Что такое TypeScript?Зачем использовать TypeScript?Ваш первый код на TypeScriptПроцесс компиляции и ошибкиИтоги: Введение в TS4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация стрелочных функцийТип возвращаемого значения 'void'Необязательные параметры с '?'Значения параметров по умолчаниюТипизация Rest-параметровОпределение типов функцийИтоги: Создание типизированных функций2Основные типы
Базовые типы: str, num, booleanТип 'any': лазейкаТип 'unknown'Работа с 'null' и 'undef'Вывод типов в действииЯвные аннотации типовИтоги: Практика по основным типам5Типы: псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения ('|')Работа с типами объединенияЛитеральные типыТипы пересечения ('&')Комбинирование псевдонимов типовИтоги: продвинутые комбинации типов3Структуры данных: массивы и кортежи
Типизированные массивыМодификатор 'readonly' для массивовЧто такое кортеж?Объявление кортежей и доступ к нимДеструктуризация кортежейКортежи readonlyМногомерные типизированные массивыОператор spread с массивамиИтоги: массивы и кортежиПотренируйтесь самостоятельно: Онлайн-компилятор JavaScript