Весной стартует сезон найма, успей отхватить свой оффер!

Отличия any и unknown в TypeScript

В TypeScript существуют два типа, которые могут быть использованы для представления любых значений: any и unknown. Несмотря на то что оба типа позволяют работать с любыми значениями, их поведение и безопасность в контексте типов различаются.

Тип any

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

Преимущества использования any

  • Гибкость: позволяет работать с переменными, чей тип заранее неизвестен или изменчив.
  • Удобство: удобно при интеграции с внешними библиотеками, когда типы не определены, или когда необходимо временно отключить проверку типов.

Недостатки использования any

  • Потеря типовой безопасности: использование any ослабляет систему типов TypeScript, позволяя совершать ошибки, которые не будут выявлены при компиляции.
  • Усложнение поддержки кода: из-за отсутствия типовой информации может стать сложно понять, какие значения могут быть присвоены переменной.

Пример использования any

let value: any;

value = 42; // Число
value = "Hello"; // Строка
value = { name: "John" }; // Объект

value.someMethod(); // Ошибка не будет обнаружена на этапе компиляции

Тип unknown

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

Преимущества использования unknown

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

Недостатки использования unknown:

  • Не такая гибкость как у any: перед использованием переменной типа unknown требуется выполнить проверку её типа, что добавляет дополнительный код.

Пример использования unknown

let value: unknown;

value = 42; // Число
value = "Hello"; // Строка

// Ошибка компиляции: нельзя вызывать методы на типе `unknown`
value.someMethod(); 

// Перед использованием нужно выполнить проверку типа
if (typeof value === "string") {
  console.log(value.toUpperCase()); // Теперь это безопасно
}

Когда использовать any, а когда unknown?

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