Sobes.tech
Middle

Фарқи байни any ва unknown дар TypeScript чист? Чаро линтер ба any шикоят намекунад, аммо барои unknown талаб мекунад, ки навъи онро маҳдуд кунад?

sobes.tech AI

Ҷавоб аз AI

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

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

  • unknown — более безопасный аналог any. Значение типа unknown можно присвоить любой переменной, но чтобы использовать его как конкретный тип, нужно сначала выполнить проверку (сужение типа). Это заставляет явно обрабатывать возможные типы и предотвращает ошибки.

Почему линтер не ругается на any, но требует сужения для unknown:

  • any считается "приглушением" ошибок, и линтер обычно не запрещает его, но рекомендует избегать.

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

Пример:

let a: any = 10;
let u: unknown = 10;

// с any можно делать что угодно:
console.log(a.toFixed(2)); // нет ошибки

// с unknown нужно сужение:
if (typeof u === 'number') {
  console.log(u.toFixed(2)); // теперь безопасно
}