Я предполагаю, что вы уже знаете, что TypeScript — это разновидность JavaScript.

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

По сути, TypeScript — это JavaScript с добавленным синтаксисом для типов. W3Schools определяет TypeScript как синтаксическую надстройку JavaScript, которая добавляет статическую типизацию. В основном это означает, что TypeScript добавляет синтаксис поверх JavaScript, позволяя разработчикам добавлять типы.

Примитивные типы TypeScript

Ниже приведены основные примитивные типы в TypeScript:

boolean —истинные или ложные значения.

число —целые числа и значения с плавающей запятой.

строка —текстовые значения, заключенные в кавычки. например "TypeScript is Awesome"

any — отключает проверку типов и позволяет использовать все типы.

неизвестно — аналогична любой, но более безопасная альтернатива

никогда — эффективно выдает ошибку всякий раз, когда она определена.

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

Разница между типами «любой» и «неизвестный»

Я представлю два основных отличия между any и unknown

  1. TypeScript заставляет нас определить тип значения unknown, прежде чем мы сможем работать с ним, но не со значением any.

Пример:

let anyValue: any = 1;
let unknownValue: unknown = 1;
anyValue.helloworld(); // No error
unknownValue.helloWorld();  // we get a TypeScript error

2. Мы не можем присвоить unknown ничему, кроме себя или any, а any можем присвоить чему угодно.

Пример:

let anyValue: any = 1;
let unknownValue: unknown = 1;
let str: string;
str = anyValue; // No error
str = unknownValue; // We get a TypeScript error

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

Рассмотрим несколько вариантов использования:

Сценарий использования 1 — описание неизвестного значения:

Мы можем использовать unknowntype для описания неизвестного нам значения. Например, значение, возвращенное из сетевого вызова:

let data: unknown = getSomeValueFromSomeWhere();
if (typeof data === 'string') {
   //data is a string.
} else if (Array.isArray(data)) {
   //data is an array.
} else if (typeof data === 'object') {
   //data is an object.
}

Вариант использования 2 — в утверждении типа:

В TypeScript утверждение типа — это метод, который информирует компилятор о типе переменной. Утверждение типа похоже на приведение типов, но оно не реконструирует код. Мы можем использовать утверждение типа, чтобы указать тип значения и сказать компилятору, чтобы он не выводил его.

Однако мы не можем просто утверждать, что значение может иметь любой желаемый тип. Мы не можем утверждать, что тип значения не совпадает с фактическим типом значения.

Пример:

let value = '1' as number; // Error, we can't say that a string is a number
interface Vehicle {
  name: string;
  model: string;
}
function buyVehicle(vehicle: Vehicle){}
buyVehicle({niceVehicle: ''} as Vehicle); // Error, this object doesn't have the required properties of the Vehicle interface.

Обходной путь для подтверждения того, что значение имеет тип, который не перекрывается с фактическим типом значения, состоит в том, чтобы сначала утверждать, что значение неизвестно:

buyVehicle({niceVehicle: ''} as unknown as Vehicle)

Однако нам следует избегать этого обходного пути, потому что он просто делает наш код небезопасным.

Заключение

Типы any и unknown — это два примитивных типа в TypeScript, которые иногда могут пригодиться.

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

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

Примечание: нам следует избегать использования any, насколько это возможно.

— -

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