Skip to main content

Що таке тип never?

Що таке тип never у TypeScript

Тип never у TypeScript означає:

«це значення ніколи не існує» або «функція ніколи не завершиться успішно».

Він використовується, щоб позначити неможливі випадки:

  • функції, які нічого не повертають і ніколи не завершуються,
  • гілки коду, які за логікою не можуть бути виконані.

Приклади, де використовується never

1. Функції, які викидають помилку

Якщо функція завжди викидає виняток, вона не повертає жодного значення - отже, її тип, що повертається, never.

javascript
function throwError(message: string): never { throw new Error(message); }

2. Функції, які ніколи не завершуються (наприклад, нескінченний цикл)

javascript
function infiniteLoop(): never { while (true) { console.log("Працюю нескінченно..."); } }

Така функція не повертає значення і не завершує виконання - отже, never.


3. Перевірка вичерпних випадків (exhaustive check)

Один із найкорисніших сценаріїв: TypeScript використовує never, щоб гарантувати, що опрацьовані всі варіанти у switch або if-розгалуженнях.

javascript
type Shape = "circle" | "square"; function getArea(shape: Shape): number { switch (shape) { case "circle": return Math.PI * 2 ** 2; case "square": return 4 * 4; default: // якщо з'явиться нова форма - TS видасть помилку const _exhaustiveCheck: never = shape; throw new Error(`Unknown shape: ${_exhaustiveCheck}`); } }

Якщо пізніше додати type Shape = "circle" | "square" | "triangle", TypeScript видасть помилку на рядку const _exhaustiveCheck: never = shape;

  • тому що "triangle" не опрацьовується.

Відмінність never від інших типів

ТипОпис
voidФункція повертає "нічого", але завершується
neverФункція ніколи не завершується (помилка або нескінченний цикл)
undefinedЗначення є, але не визначене
nullНавмисна відсутність значення

Приклад для порівняння:

javascript
function log(): void { console.log("Просто лог"); } function crash(): never { throw new Error("Помилка!"); }

Особливості типу never

  1. never - підтип усіх типів, таким чином його можна присвоїти змінній будь-якого типу:
javascript
let n: never; // let x: number = n; // допустимо
  1. Але навпаки - не можна:
javascript
let n: never; // n = 5; // Помилка: number не сумісний з never
  1. TypeScript автоматично виводить never у ситуаціях, де змінна ніколи не може мати значення:
javascript
function process(value: string | number) { if (typeof value === "string") { console.log(value.toUpperCase()); } else if (typeof value === "number") { console.log(value.toFixed(2)); } else { // value тут має тип never console.log(value); } }

Підсумок

ВластивістьОпис
ТипПримітивний
ЗначенняНе має
Де використовуєтьсяПомилки, нескінченні цикли, неможливі гілки
Відмінність від voidvoid повертає "нічого", never - "ніколи"
ПідтипСумісний з усіма типами, але жоден тип не сумісний з ним

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.