Тип any

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

Тип any в TypeScript — это способ отключить проверку типов для конкретной переменной. Когда вы помечаете переменную как any, компилятор позволяет вам делать с ней что угодно: присваивать любые значения, вызывать любые методы (даже несуществующие) и обращаться к любым свойствам.

Хотя это может показаться удобным, использование any лишает вас преимуществ TypeScript: автодополнения и защиты от ошибок. Обычно any используется при миграции старого JS-кода или работе со сложными сторонними библиотеками. В этом тренажере мы рассмотрим, как работает any, и увидим, почему его стоит избегать, когда это возможно.

Задания продемонстрируют "вседозволенность" этого типа. Вы увидите, как код компилируется без ошибок там, где строгая типизация обычно бы это запретила.

Список тем

1. Присвоение типа any

id: 40629_ts_any_replace_01

В этом задании вам нужно объявить переменную, которая сможет хранить данные разных типов. Для этого в TypeScript существует специальный тип, который отключает проверку типов и позволяет присваивать переменной значения любого типа. Дополните код, указав этот тип для переменной `dynamicData`, чтобы код компилировался без ошибок и переменная могла принимать и число, и строку, и булево значение, как показано в примере.

Заполните пропуски
// Объявите переменную dynamicData с типом, позволяющим хранить любые значения
let dynamicData: input1S;

dynamicData = 42;
dynamicData = "Hello, TypeScript";
dynamicData = true;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Строгие типы vs Any

id: 40629_ts_any_compare_02

Сопоставьте каждое описание поведения из левой колонки с соответствующим типом данных из правой. Обратите внимание на различия в строгой проверке типов и динамическом поведении. В задании представлены 5 пар для сопоставления, которые иллюстрируют ключевые различия между строгими типами TypeScript и типом any.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
Вызывает ошибку компиляции при попытке присвоить значение другого типа
Позволяет использовать автодополнение (IntelliSense) в IDE, так как тип известен
Гарантирует, что тип переменной останется неизменным после объявления
Позволяет присваивать значения любого типа без ошибок компиляции
Отключает проверку типов для переменной, что может привести к ошибкам во время выполнения
Строгий тип (например, number, string, boolean)
Строгий тип (например, number, string, boolean)
Тип any
Строгий тип (например, number, string, boolean)
Тип any
Сообщения
Проверить
Показать подсказку

3. Поведение any в runtime

id: 40629_ts_any_predict_03

Проанализируйте приведённый ниже код на TypeScript. Обратите внимание, что переменная имеет тип any, что отключает проверку типы на этапе компиляции. Определите, что произойдёт при попытке выполнения этого кода: будет выведено значение, возникнет ошибка компиляции или ошибка времени выполнения (Runtime Error)?

Выберите правильный вариант ответа
let value: any = 42;
value = "hello";
value = 100;
console.log(value.toUpperCase());
Сообщения
Проверить
Показать подсказку

4. Опечатка в массиве any

id: 40629_ts_any_error_04

В этом фрагменте кода TypeScript объявлен массив, который должен хранить элементы любого типа благодаря типу any. Однако в синтаксисе допущены две ошибки: одна в объявлении типа массива, другая — в обращении к его элементу. Исправьте строки, чтобы код корректно создал массив и вывел первый элемент на экран.

Найдите ошибку и исправьте
let arr: Any[] = [1, "two", true];
console.log(arr(0));
console.log("Программа завершена");
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Найти опасные места

id: 40629_ts_any_highlight_05

В представленном фрагменте кода TypeScript найдите и выделите только те переменные, которые объявлены с опасным типом `any`. Обратите внимание на объявления переменных с использованием ключевых слов `let` и `const`. Для каждой выделенной переменной выберите один из двух доступных типов: «Переменная с типом any» или «Переменная с другим типом». Задание поможет научиться идентифицировать места, где используется нетипизированный код, что является важным шагом к повышению безопасности и поддерживаемости программы.

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
let {{count~|~t1}}: number = 5;
const {{data~|~t2}}: any = { name: "John" };
let {{isActive~|~t3}} = true;
let {{value~|~t4}}: any = "unknown";
const {{id~|~t5}}: string = "abc123";
Переменная с другим типом
Переменная с типом any
Сообщения
Проверить
Показать подсказку

6. Смена значений any

id: 40629_ts_any_sequencing_06

Перед вами строки TypeScript-кода, демонстрирующие использование типа any. Они перемешаны. Расставьте строки в правильном порядке, чтобы получилась корректная программа, которая объявляет переменную с типом any, присваивает ей числовое значение, затем строковое, затем логическое, и выводит каждое значение в консоль. Программа должна показывать динамическую типизацию типа any, позволяющего переменной менять тип данных во время выполнения.

Расставьте строки в правильном порядке
x = 10;
console.log(x);
console.log(x);
console.log(x);
x = 'text';
x = false;
let x: any;
Сообщения
Проверить
Показать подсказку

7. Конкатенация с any

id: 40629_ts_any_give_result_07

В данном задании рассматривается работа с типом `any` в TypeScript. В приведённом фрагменте кода объявляется переменная с типом `any`, которая инициализируется числом, а затем к ней прибавляется строка. Проанализируйте код и определите, какая строка будет выведена в консоль. Введите полученную строку целиком, включая пробелы и знаки препинания, если они есть.

Что должно получиться?
let value: any = 42;
let text: string = " apples";
value = value + text;
console.log(value);
Сообщения
Проверить
Показать подсказку

TypeScript: компиляция и запуск

id: 40629_compiler

Исследуйте самый «гибкий» и опасный тип в TypeScript — any! Этот тип фактически отключает проверку типов, позволяя переменной принимать любые значения и имитировать поведение чистого JavaScript. Попробуйте присвоить переменной строку, затем число, а потом объект — вы увидите, что компилятор не выдаст ни одной ошибки. Но будьте осторожны: попробуйте вызвать метод, которого не существует (например, у числа), и посмотрите, как программа «сломается» во время выполнения, хотя TypeScript будет считать, что всё в порядке. Экспериментируйте, добавляя свои функции и ломая логику!

TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру