Тип void в функциях
Узнайте, чем void отличается от undefined в позициях возвращаемого значения функции
«Тип void в функциях» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Возвращаемый тип без значения
void описывает функцию, которая не возвращает полезного значения. Функция всё равно завершается, просто не выдаёт результат, который следует использовать. Это тип функций, вызываемых ради побочных эффектов.
function log(message: string): void {
console.log(message);
}
log('Hello void');Автоматически выведенный тип без значения
Если в функции нет оператора return (или есть только пустой return;), TypeScript автоматически выводит тип void. Обычно нет необходимости указывать его явно, хотя это документирует намерение.
function greet(name: string) {
console.log('Hi ' + name);
// no return -> inferred void
}
greet('Ada');Тип без значения и неопределённое значение
Они связаны, но это не одно и то же. Функция типа void может фактически вернуть undefined, а может и не вернуть, поэтому не следует полагаться на её возвращаемое значение. Функция, типизированная как возвращающая undefined, должна явно вернуть это значение.
function a(): void { /* returns nothing useful */ }
function b(): undefined { return undefined; }
console.log(a(), b());Не следует использовать результат функции без значения
Во время выполнения вызов функции типа void возвращает значение undefined, но система типов не рекомендует его использовать. Воспринимайте void как указание «игнорировать это возвращаемое значение».
function save(): void {
console.log('saved');
}
const result = save(); // result has type void
console.log(result); // undefined at runtimeТип без значения в типах обратного вызова
Есть тонкое, но важное правило: обратный вызов, объявленный возвращающим void, может быть реализован функцией, возвращающей любое значение. Дополнительное возвращаемое значение просто игнорируется.
type Handler = () => void;
const h: Handler = () => 42; // returns number, still fine
h();
console.log('Returned value is ignored by callers');Зачем нужно это правило
Благодаря такой гибкости можно передавать функции вроде arr.push в качестве обратных вызовов типа void, хотя они возвращают число. Вызывающий код обещает не использовать возвращаемое значение, поэтому любой результат безопасно игнорировать.
const items: number[] = [];
const nums = [1, 2, 3];
nums.forEach((n) => items.push(n)); // push returns number, ok
console.log(items);Контекстный тип без значения в методах массивов
forEach ожидает обратный вызов, возвращающий void. Поэтому можно написать стрелочную функцию в одну строку, которая заодно возвращает значение, и не получить ошибку — контекстный тип void поглощает этот результат.
const result: string[] = [];
['a', 'b'].forEach((x) => result.push(x.toUpperCase()));
console.log(result);Распространённая путаница
Правило для обратных вызовов типа void относится к типу обратного вызова, а не к функциям, у которых собственный объявленный возвращаемый тип — void. Функция, буквально объявленная как (): void, всё равно не может содержать return value; с ненулевым значением.
function f(): void {
return; // ok
// return 5; // Error: 5 not assignable to void
}
f();
console.log('declared void cannot return a value');Параметры типа без значения встречаются редко
Хотя это бывает редко, void может использоваться как тип параметра в обобщённых конструкциях продвинутого уровня. В обычном коде его почти всегда используют как возвращаемый тип, обозначающий «нет значимого результата».
type Listener = (event: string) => void;
const onClick: Listener = (e) => console.log('Event:', e);
onClick('click');Тип без значения и промисы
Асинхронные функции часто возвращают Promise<void>, когда выполняют работу, но завершаются без значения. Этот шаблон соответствует синхронному void в асинхронном коде.
async function sync(): Promise<void> {
console.log('syncing...');
// resolves with no value
}
sync().then(() => console.log('done'));Осознанный выбор типа без значения
Указывайте void, если хотите сообщить, что функция существует ради побочных эффектов и вызывающий код не должен зависеть от возвращаемого значения. Это проясняет намерение и позволяет использовать гибкое правило для обратных вызовов.
function notify(msg: string): void {
console.log('NOTIFY:', msg);
}
const handlers: Array<(m: string) => void> = [notify];
handlers.forEach((fn) => fn('ping'));Быстрая проверка
Проверьте, насколько хорошо Вы понимаете тип без значения.
Повторение: тип без значения
Вы узнали, что void:
- Обозначает функции, возвращающие полезное значение отсутствует.
- Отличается от
undefined: результаты типа void не следует использовать. - В качестве типа обратного вызова принимает функции, возвращающие любое значение (вызывающий код его игнорирует).
- Позволяет удобно использовать методы вроде
pushвнутриforEach.
Далее мы объединим всё изученное и безопасно обработаем unknown.
const tasks: Array<() => void> = [
() => console.log('task 1'),
() => console.log('task 2')
];
tasks.forEach((t) => t());Часто задаваемые вопросы
Урок «Тип void в функциях» бесплатный?
Да — полный текст урока «Тип void в функциях» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Тип void в функциях»?
Узнайте, чем void отличается от undefined в позициях возвращаемого значения функции Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Тип void в функциях»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Понимание unknown и any
- Тип never и невозможные состояния
- Тип void в функциях
- Типобезопасная работа с unknown