← Назад ко всем вопросам

В чем разница между any и unknown

1️⃣ Как кратко ответить

any и unknown — это типы в TypeScript, которые позволяют работать с переменными, тип которых заранее неизвестен. any отключает проверку типов, позволяя выполнять любые операции без ошибок компиляции, что может привести к ошибкам в рантайме. unknown требует явного приведения типа перед использованием, обеспечивая более строгую проверку типов и повышая безопасность кода.

2️⃣ Подробное объяснение темы

В TypeScript типы any и unknown используются для работы с переменными, тип которых заранее неизвестен. Однако они имеют разные цели и уровни безопасности.

Тип any

Тип any позволяет отключить проверку типов. Это означает, что переменной с типом any можно присвоить значение любого типа, и компилятор TypeScript не будет выдавать ошибок при выполнении операций с этой переменной.

let value: any;
​
value = 5; // Присваиваем число
value = "Hello"; // Присваиваем строку
value = true; // Присваиваем булево значение
​
// Выполняем операции без ошибок компиляции
console.log(value.toUpperCase()); // Ошибка в рантайме, если value не строка
  • let value: any; — объявление переменной value с типом any.
  • value = 5;, value = "Hello";, value = true; — присваивание значений разных типов.
  • console.log(value.toUpperCase()); — попытка вызвать метод toUpperCase, который может привести к ошибке в рантайме, если value не является строкой.

Использование any может быть полезно для быстрого прототипирования, но оно снижает безопасность кода, так как ошибки могут проявиться только в рантайме.

Тип unknown

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

let value: unknown;
​
value = 5; // Присваиваем число
value = "Hello"; // Присваиваем строку
value = true; // Присваиваем булево значение
​
// Приведение типа перед использованием
if (typeof value === "string") {
  console.log(value.toUpperCase()); // Безопасно, так как проверили тип
}
  • let value: unknown; — объявление переменной value с типом unknown.
  • value = 5;, value = "Hello";, value = true; — присваивание значений разных типов.
  • if (typeof value === "string") { ... } — проверка типа перед использованием.
  • console.log(value.toUpperCase()); — безопасное использование метода toUpperCase после проверки типа.

Использование unknown рекомендуется, когда необходимо работать с переменными неизвестного типа, но при этом важно сохранить безопасность и избежать ошибок в рантайме. Это особенно полезно при работе с данными из внешних источников, где тип данных может быть непредсказуемым.

Тема: TypeScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки