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 підвищує зрозумілість і безпечність коду, адже дозволяє чітко вказати, що функція не має повертати значення.


Мітки: