Besides being a common interview question, understanding this difference is also useful in day-to-day work.
Any
Let's start with any. Put simply, when we use it, we turn TypeScript off.
let num: any = 1; // ми відключили TypeScript для змінної num
num.push() // TS відключений тому ми можемо використовувати будь які методи
// в числа такого метода не існує тому ми отримаємо помилку в runtime
// але не зловимо її на етапі компіляції чи лінтера
Unknown
It is often described as a type-safe alternative to any. If we declare a value as unknown, we can assign anything to it, but before using it we must perform type narrowing and check its type.
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();
}
To sum up, from a type safety standpoint you should always use unknown and avoid using any.