void у TypeScript – це спеціальний тип, який вказує, що функція не повертає значення. Його використовують у тих випадках, коли функція виконує лише певні дії, але результат виклику не потрібен.
Як використовувати void
Найчастіше цей тип застосовують для позначення функцій, які нічого не повертають:
function logMessage(message: string): void {
console.log(message);
}
logMessage('Hello, TypeScript!'); // Hello, TypeScript!У цьому прикладі функція logMessage() не повертає значення, вона лише виводить повідомлення у консоль.
Якщо викликати функцію з типом повернення void і спробувати вивести її результат у консоль, то під час виконання в JavaScript/TypeScript ви отримаєте undefined. Це пояснюється тим, що будь-яка функція без явного return за замовчуванням повертає undefined. Наприклад:
function logMessage(message: string): void {
console.log(message);
}
const result = logMessage('Hello!');
console.log(result); // undefinedВідмінність void від undefined
Іноді виникає питання: у чому різниця між цими поняттями?
- void – це тип у TypeScript, який вказує, що функція не повертає значення.
- undefined – це конкретне значення в JavaScript, яке функція може повернути явно або яке функція повертає за замовчуванням, якщо немає return.
Приклад з undefined:
function example(): undefined {
return;
}
console.log(example()); // undefinedХоча функція з типом void не має повертати значення, технічно вона може повернути undefined, але робити це явно не рекомендується:
function example(): void {
return undefined; // допустимо, але не рекомендовано
}void у контексті callback-функцій
Тип void часто застосовують для функцій зворотного виклику (callback-функцій). Це вказує, що від callback не очікується жодного значення, та його результат не буде використано:
function doSomething(callback: () => void): void {
callback();
}
doSomething(() => console.log('Callback called!'));
// Callback called!Запис callback: () => void означає, що результат callback не має значення. Якщо він щось поверне, його все одно буде проігноровано:
function doSomething(callback: () => void): void {
callback();
}
const result = doSomething(() => {
console.log('Callback called!');
return 42; // Це допустимо, але значення 42 ніхто не використає
});
console.log(result); // undefinedПриклад з Promise<void>
Тип void також використовується і в асинхронних функціях:
async function saveData(): Promise<void> {
await new Promise((resolve) => setTimeout(resolve, 1000));
console.log('Data saved');
}
saveData().then((result) => {
console.log(result); // undefined
});Такий підхід зручний для сценаріїв, де важливий сам факт виконання (наприклад збереження даних, логування, тощо), а не результат обчислення.
void та методи класів
Приклад використання типу void для методу класу:
class Logger {
log(message: string): void {
console.log(message);
}
}
const logger = new Logger();
logger.log('Class method with void type');
// Class method with void typeВикористання void у змінних
Хоча змінним теж можна надати тип void, практичної користі від цього майже немає. Іноді такий прийом зустрічається у складних сценаріях – наприклад, щоб явно показати, що значення змінної не використовується:
let unusable: void = undefined;Зазвичай так робити не рекомендується, бо це ускладнює читання коду.
Підсумок
Використання void підвищує зрозумілість і безпечність коду, адже дозволяє чітко вказати, що функція не має повертати значення.