В этом уроке мы рассмотрим тип void
. Он указывается как возврат для функций, которые ничего не возвращают.
Тип void
выводится автоматически, когда мы работаем с пустой функцией или если внутри функции нет инструкции return
:
function noop() {
// Внутри пусто
}
В JavaScript подобные функции возвращают undefined
, но в TypeScript void
и undefined
— это разные вещи. Они различаются по контекстной типизации. А происходит это из-за особенностей работы самого JavaScript. Самый яркий пример — метод forEach()
.
Метод forEach()
не использует данные, возвращаемые переданным колбеком, который вызывается внутри. Было бы логично определить возврат как undefined
, но посмотрим на пример:
const numbers = [1, 2, 3];
const result = [];
numbers.forEach((n) => result.push(n));
Метод push()
возвращает новую длину массива. Если бы forEach()
требовал от колбека возврат undefined
, то такой код привел бы к ошибке компиляции. Его пришлось бы переписать. Например, так:
// Теперь колбек ничего не возвращает
// Поэтому результат вызова — это undefined
numbers.forEach((n) => {
result.push(n);
});
Тип void
помогает не создавать такой код. Он позволяет возвращать любые данные, но делает их использование бессмысленным:
type VoidFunc = () => void;
// Тип функции определяется
// через контекст присваивания ее переменной с типом VoidFunc
const func: VoidFunc = () => true;
const trueResult = func(); // true
Существует единственная ситуация, когда указание void
явно запрещает возврат из функции. Это определение функции вне контекста использования, когда ее тип указывается явно:
function foo(): void {
return true; // Error!
}
const bar = function(): void {
return true; // Error!
};
Еще void
считается оператором JavaScript, поэтому важно не запутаться с ним. Он вычисляет выражение, которое следует за ним и возвращает undefined
:
void 10 === undefined // true
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.