tutorial - typescript уроки




«неизвестно» против «любой» (2)

TypeScript 3.0 вводит unknown тип, согласно их вики:

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

В чем разница между unknown и any ? Когда мы должны использовать unknown над any ?


Вы можете прочитать больше о unknown в PR или объявлении RC , но суть этого такова:

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

Несколько примеров:

let vAny: any = 10;          // We can assign anthing to any
let vUnknown: unknown =  10; // We can assign anthing to unknown just like any 


let s1: string = vAny;     // Any is assigable to anything 
let s2: string = vUnknown; // Invalid we can't assign vUnknown to any other type (without an explicit assertion)

vAny.method();     // ok anything goes with any
vUnknown.method(); // not ok, we don't know anything about this variable

Предлагаемое использование:

Часто мы хотим описать наименее способный тип в TypeScript. Это полезно для API, которые хотят сигнализировать «это может быть любое значение, поэтому вы должны выполнить какой-либо тип проверки перед использованием». Это заставляет пользователей безопасно анализировать возвращаемые значения.


Разница между неизвестным и любым описывается как:

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

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

Это полезно для API, которые хотят сигнализировать «это может быть любое значение, поэтому вы должны выполнить какой-либо тип проверки перед использованием». Это заставляет пользователей безопасно анализировать возвращаемые значения.

Взгляните на объявление TypeScript 3.0 для примеров проверки типа переменной типа unknown и более подробного объяснения.





typescript3.0