Skip to main content

Що означає тип unknown?

Що означає тип unknown в TypeScript

Тип unknown - це безпечна альтернатива типу any. Він означає:

«Тип значення невідомий заздалегідь, і перш ніж використовувати його, потрібно перевірити тип (звуження типу).»

Іншими словами - unknown говорить TypeScript:

«Я не знаю, що це за значення, але хочу безпечно з ним працювати.»


Приклад базового використання

javascript
let value: unknown; value = 42; value = "Привіт"; value = { name: "Tim" }; value = true;

Так можна присвоювати unknown будь-яке значення, але не можна використовувати його без перевірки.


У чому відмінність від any

Операціяanyunknown
Можна присвоювати будь-які значеннятактак
Можна виконувати будь-які операціїтакні (потрібно перевірити тип)
Безпека типівнітак
Потрібно звужувати тип перед використаннямнітак

Приклад:

javascript
let a: any = 10; a.toUpperCase(); // помилка з'явиться тільки під час виконання let b: unknown = 10; // b.toUpperCase(); // помилка на етапі компіляції - TypeScript не знає, що це рядок

Щоб використати unknown, потрібно спочатку перевірити тип:

javascript
if (typeof b === "string") { console.log(b.toUpperCase()); // тепер можна }

Приклади використання unknown

1. При роботі із зовнішніми даними (наприклад, API)

javascript
function parseJSON(input: string): unknown { return JSON.parse(input); } const result = parseJSON('{"name": "Tim"}'); // console.log(result.name); // не можна if (typeof result === "object" && result !== null && "name" in result) { console.log((result as { name: string }).name); // безпечно }

2. При динамічних типах даних

javascript
function handleInput(data: unknown) { if (typeof data === "number") { console.log(data.toFixed(2)); } else if (typeof data === "string") { console.log(data.toUpperCase()); } else { console.log("Невідомий тип"); } }

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

  1. unknown - це супертип усіх типів, тобто йому можна присвоїти що завгодно:
javascript
let x: unknown; x = 123; x = "рядок"; x = true;
  1. Але навпаки - не можна присвоїти unknown змінній іншого типу без перевірки:
javascript
let y: number; let x: unknown = 10; // y = x; // помилка - потрібно явно звузити або привести тип y = x as number; // коректно
  1. Тип unknown - "верхній" тип системи типів TypeScript (аналог any, але безпечний):
javascript
never ⊂ string ⊂ unknown

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

javascript
function testAny(value: any) { value.foo.bar(); // компілюється, але вибухне в рантаймі } function testUnknown(value: unknown) { // value.foo.bar(); // помилка під час компіляції - безпечно if (typeof value === "object" && value !== null) { console.log("Об'єкт:", value); } }

Коротка зведена таблиця

ВластивістьОпис
ТипПримітивний службовий
ПризначенняБезпечний аналог any
Можна присвоїтиБудь-яке значення
Можна використовуватиЛише після перевірки типу
ТипізаціяСтрога та безпечна
Де використовуєтьсяНевідомі дані (API, JSON.parse, введення користувача)

Підсумок

  • any - "Роби що хочеш, TypeScript не перевіряє."
  • unknown - "Ти можеш зберігати що завгодно, але доведи, що це безпечно."

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

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

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