Menu
Coddy logo textTech

Тип 'never'

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

Тип never представляет значения, которые никогда не возникают. Поначалу это может показаться запутанным, но на самом деле это вполне логично, если подумать об определенных сценариях в вашем коде.

Тип never наиболее часто используется для функций, которые никогда не возвращают управление обычным способом.

Это включает в себя функции, которые всегда вызывают ошибку или содержат бесконечные циклы:

function throwError(message: string): never {
  throw new Error(message);
}

function infiniteLoop(): never {
  while (true) {
    // Этот цикл никогда не заканчивается
  }
}

В отличие от void, который указывает на то, что функция не возвращает значимого значения, never указывает на то, что функция вообще никогда не достигает своей конечной точки. Выполнение либо прекращается из-за выброшенной ошибки, либо продолжается бесконечно.

challenge icon

Задание

Легко

Создайте функцию с именем 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}`);
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

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

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