Окрім того, що це запитання часто звучить на інтервʼю, різницю корисно розуміти і для роботи.
Any
Отже, спочатку розберемось з any - простими словами, коли ми його використовуємо, ми відключаємо TypeScript.
let num: any = 1; // ми відключили TypeScript для змінної num
num.push() // TS відключений тому ми можемо використовувати будь які методи
// в числа такого метода не існує тому ми отримаємо помилку в runtime
// але не зловимо її на етапі компіляції чи лінтера
Unknown
Його часто порівнюють з безпечною альтернативою any. Якщо ми вказуємо тип unknown, то ми можемо записувати будь що, але при використанні ми забовʼязані виконати type narrowing і перевірити тип.
let num: unknown = 1;
num = 'some string'; // unknown дозволяє записувати будь що
// якщо ми спробуємо виклакати якийсь метод чи властивість на num
// ми отримаємо помилку і TS забовʼяже перевірити тип
if (typeof num === 'string') {
// тепер ми зможемо викликати будь який метод чи властивість
// які доступні в String
num.toUpperCase();
}
// Для прикладу, застосуємо narrowing для number
if (typeof num === 'number') {
num.toFixed();
}
Якщо підсумувати, то з точки зору безпеки типів - потрібно завжди використовувати unknown і уникати використання any.