Базовый Тип Any¶
То, что TypeScript является типизированной надстройкой над JavaScript, от которой после компиляции не остаётся и следа, означает, что первый перенял от второго всю его идеологию. Одним из таких моментов является разделение типов данных на типы значения (примитивные) и ссылочные типы. TypeScript определяет неизвестный в мире JavaScript тип any
, являющийся базовым для всех остальных типов. Именно по этой причине с него и начнется знакомство с системой типов TypeScript.
Any произвольный тип¶
Тип any
указывается при помощи ключевого слова any
. Все типы в TypeScript являются его подтипами. Это означает, что он совместим в обе стороны с любым другим типом и с точки зрения системы типов является высшим типом (top type).
1 2 3 |
|
Поскольку значение, принадлежащее к типу any
, совместимо с любыми другими значениями, это может привести к непредсказуемым последствиям. Поэтому указывать данный тип в аннотации настоятельно рекомендуется только в самых крайних случаях. К примеру, при применении техники TDD
, которая подразумевает написание тестов раньше самого кода, тип некоторых конструкций может быть неизвестен. В таком и любых других подобных случаях any
допустимо указать в аннотации типа. В остальных случаях настоятельно рекомендуется рассматривать варианты с более конкретными типами.
Поскольку тип any
позволяет работать со значением динамически, это не вызывает ошибок при обращении к неописанным в типе членам, что сводит пользу от типизации к нулю.
Примером этого может служить сервис, который работает с сервером посредством api. Полученные и сериализованные данные могут храниться как тип any
, прежде чем они будут преобразованы к конкретному типу.
1 2 |
|
Если при объявлении переменных и полей не было присвоено значение, компилятором будет выведен тип данных any
.
1 2 3 4 5 6 |
|
То же правило касается и параметров функций.
1 2 3 |
|
Кроме того, если функция возвращает значение, принадлежащее к типу, который компилятор не в состоянии вывести, то возвращаемый этой функцией тип данных будет также выведен как тип any
.
1 2 3 4 |
|
Тип any
является уникальным для TypeScript, в JavaScript подобного типа не существует.