TypeScript Academy · Урок

void, never и сигнатуры функций

Разберитесь, как void обозначает отсутствие возвращаемого значения, а never — недостижимый код

Урок 4 из 413 шагов

«void, never и сигнатуры функций» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Добро пожаловать

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

void: отсутствие содержательного возвращаемого значения

void используется, когда функция выполняет побочный эффект, но не возвращает значение. Он допускает возврат undefined, но показывает, что возвращаемое значение не следует использовать.
function logError(msg: string): void {
  console.error(msg);
  // implicit return undefined
}

Различие между void и undefined

void и undefined похожи, но различаются. Функция с типом void может вернуть undefined. Однако void показывает, что вызывающий код должен проигнорировать возвращаемое значение.
const fn: () => void = () => 42; // Allowed! Caller ignores return
const fn2: () => undefined = () => 42; // Error

void в обратных вызовах

При типизации параметра-обратного вызова void показывает, что вызывающий код не использует возвращаемое значение. Благодаря этому обратные вызовы могут возвращать любой тип.
function run(cb: () => void): void { cb(); }
run(() => 'hello'); // OK — return value ignored

never: недостижимый тип

never обозначает значение, которое никогда не возникает. Функция, возвращающая never, либо выбрасывает ошибку, либо работает в бесконечном цикле.
function fail(msg: string): never {
  throw new Error(msg);
}
function loop(): never {
  while (true) {}
}

never при проверке полноты

never используется в операторах switch, чтобы убедиться, что обработаны все варианты объединения типов. Присваивание значения never вызывает ошибку, если какой-либо вариант пропущен.
type Shape = 'circle' | 'square';
function area(s: Shape): number {
  switch (s) {
    case 'circle': return 3.14;
    case 'square': return 1;
    default:
      const _: never = s; // Error if a new shape is added
      return 0;
  }
}

never является подтипом всех типов

never можно присвоить любому типу (этот тип никогда не возникает, поэтому формально удовлетворяет любому типу). Ни один другой тип нельзя присвоить never.

Сигнатуры типов функций

Тип функции записывается как `(param: Type) => ReturnType`. Это описывает функции как значения первого класса.
type Handler = (event: MouseEvent) => void;
type Transform = (input: string) => string;

Сигнатуры вызова в интерфейсах

Интерфейсы могут определять вызываемые типы с помощью синтаксиса сигнатуры вызова.
interface Formatter {
  (value: string): string;
  locale: string;
}

Сигнатуры конструктора

Интерфейсы также могут определять конструируемые типы, используя ключевое слово new в сигнатуре конструктора.
interface Constructor {
  new (name: string): Animal;
}

Совместное использование void и never при обработке ошибок

Функции, которые всегда выбрасывают ошибки, используют never. Функции, которые поглощают ошибки и ничего не возвращают, используют void. Это различие важно для анализа потока управления.
function orThrow(val: string | null): string {
  if (val === null) fail('null!'); // never
  return val; // TypeScript knows this is reachable
}

Быстрая проверка

Какой возвращаемый тип показывает, что функция всегда будет выбрасывать ошибку и никогда не завершится обычным возвратом?

Итоги

Используйте void для функций с побочными эффектами и без содержательного возвращаемого значения. Используйте never для функций, которые выбрасывают ошибки или зацикливаются. never обеспечивает проверку полноты и является подтипом всех типов.
Можно начать бесплатно

Изучай TypeScript с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
101
Уроки
352

Часто задаваемые вопросы

Урок «void, never и сигнатуры функций» бесплатный?

Да — полный текст урока «void, never и сигнатуры функций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «void, never и сигнатуры функций»?

Разберитесь, как void обозначает отсутствие возвращаемого значения, а never — недостижимый код Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «void, never и сигнатуры функций»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Аннотации типов параметров и возвращаемых значений
  2. Необязательные параметры и параметры по умолчанию
  3. Остаточные параметры и оператор разворота с типами
  4. void, never и сигнатуры функций
← Назад к TypeScript Academy