В этом руководстве вы узнаете о типе данных TypeScript any
и о том, как правильно использовать его в своем коде.
Введение в тип any
Иногда вам может понадобиться сохранить значение в переменной. Но вы не знаете ее тип на момент написания программы. И неизвестное значение может быть получено из стороннего API или пользовательского ввода.
В этом случае вы хотите отказаться от проверки типов и позволить значению проходить проверку во время компиляции.
Для этого вы используете тип any
. Тип any
в Typescript позволяет присваивать переменной значение любого типа:
// json may come from a third-party API const json = `{"latitude": 10.11, "longitude":12.12}`; // parse JSON to find location const currentLocation = JSON.parse(json); console.log(currentLocation);
Выход:
{ latitude: 10.11, longitude: 12.12 }
В этом примере переменная currentLocation
назначается объекту, возвращаемому функцией JSON.parse()
.
Однако, когда вы используете currentLocation для доступа к свойствам объекта, TypeScript также не будет проверять:
console.log(currentLocation.x);
Выход:
undefined
Компилятор TypeScript не выдает никаких ошибок.
Тип any
предоставляет вам возможность работать с существующей кодовой базой JavaScript. Это позволяет постепенно включать и отключать проверку типов во время компиляции. Поэтому вы можете использовать тип any
для переноса проекта JavaScript на TypeScript.
TypeScript any: неявная типизация
Если вы объявляете переменную без указания типа, TypeScript предполагает, что вы используете тип any
. Эта функция называется выводом типа. По сути, TypeScript угадывает тип переменной. Например:
let result;
В этом примере TypeScript определяет тип за вас. Эта практика называется неявной типизацией.
Обратите внимание: чтобы отключить неявную типизацию для типа any
, вы должны изменить параметр noImplicitAny
в файле tsconfig.json
на true.
Сравнение any и object
Если вы объявляете переменную с типом object
, вы также можете присвоить ей любое значение.
Однако вы не можете вызвать для него метод, даже если метод действительно существует. Например:
let result: any; result = 10.123; console.log(result.toFixed()); result.willExist(); //
В этом примере компилятор TypeScript не выдает никаких предупреждений, даже если метод willExist()
не существует во время компиляции, потому что метод willExist()
может быть доступен во время выполнения.
Однако, если вы измените тип переменной result
на object
, компилятор TypeScript выдаст ошибку:
let result: object; result = 10.123; result.toFixed();
Ошибка:
error TS2339: Property 'toFixed' does not exist on type 'object'.
Заключение
- Тип TypeScript
any
позволяет хранить значения любого типа. Он указывает компилятору пропустить проверку типов. - Используйте тип
any
для хранения значения, тип которого на самом деле неизвестен во время компиляции или при переносе проекта JavaScript в проект TypeScript.