Тип any в TypeScript — это способ отключить проверку типов для конкретной переменной. Когда вы помечаете переменную как any, компилятор позволяет вам делать с ней что угодно: присваивать любые значения, вызывать любые методы (даже несуществующие) и обращаться к любым свойствам.
Хотя это может показаться удобным, использование any лишает вас преимуществ TypeScript: автодополнения и защиты от ошибок. Обычно any используется при миграции старого JS-кода или работе со сложными сторонними библиотеками. В этом тренажере мы рассмотрим, как работает any, и увидим, почему его стоит избегать, когда это возможно.
Задания продемонстрируют "вседозволенность" этого типа. Вы увидите, как код компилируется без ошибок там, где строгая типизация обычно бы это запретила.
- Модуль 1: Введение в TypeScript
- Модуль 2: Примитивные типы
- Модуль 3: Специальные типы
- Модуль 4: Массивы
- Модуль 5: Кортежи (Tuples)
- Модуль 6: Объекты
- Модуль 7: Функции
- Модуль 8: Union типы
- Модуль 9: Литеральные типы
- Модуль 10: Type Aliases
- Модуль 11: Интерфейсы
- Модуль 12: Type Guards и Narrowing
- Модуль 13: Enums
- Модуль 14: Классы
- Модуль 15: Generics — основы
- Модуль 16: Generics — ограничения
- Модуль 17: Utility Types — базовые
- Модуль 18: Utility Types — работа с Union
- Модуль 19: Utility Types — функции
- Модуль 20: Type Assertions
- Модуль 21: Keyof и Typeof операторы
- Модуль 22: Mapped Types
- Модуль 23: Conditional Types
- Модуль 24: Discriminated Unions
- Модуль 25: Модули и типы
- Модуль 26: Declaration Files
- Модуль 27: Типизация асинхронного кода
- Модуль 28: Практические паттерны
1. Присвоение типа any
В этом задании вам нужно объявить переменную, которая сможет хранить данные разных типов. Для этого в TypeScript существует специальный тип, который отключает проверку типов и позволяет присваивать переменной значения любого типа. Дополните код, указав этот тип для переменной `dynamicData`, чтобы код компилировался без ошибок и переменная могла принимать и число, и строку, и булево значение, как показано в примере.
// Объявите переменную dynamicData с типом, позволяющим хранить любые значения
let dynamicData: input1S;
dynamicData = 42;
dynamicData = "Hello, TypeScript";
dynamicData = true;2. Строгие типы vs Any
Сопоставьте каждое описание поведения из левой колонки с соответствующим типом данных из правой. Обратите внимание на различия в строгой проверке типов и динамическом поведении. В задании представлены 5 пар для сопоставления, которые иллюстрируют ключевые различия между строгими типами TypeScript и типом any.
3. Поведение any в runtime
Проанализируйте приведённый ниже код на TypeScript. Обратите внимание, что переменная имеет тип any, что отключает проверку типы на этапе компиляции. Определите, что произойдёт при попытке выполнения этого кода: будет выведено значение, возникнет ошибка компиляции или ошибка времени выполнения (Runtime Error)?
let value: any = 42;
value = "hello";
value = 100;
console.log(value.toUpperCase());4. Опечатка в массиве any
В этом фрагменте кода TypeScript объявлен массив, который должен хранить элементы любого типа благодаря типу any. Однако в синтаксисе допущены две ошибки: одна в объявлении типа массива, другая — в обращении к его элементу. Исправьте строки, чтобы код корректно создал массив и вывел первый элемент на экран.
let arr: Any[] = [1, "two", true];console.log(arr(0));console.log("Программа завершена");5. Найти опасные места
В представленном фрагменте кода 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";6. Смена значений any
Перед вами строки TypeScript-кода, демонстрирующие использование типа any. Они перемешаны. Расставьте строки в правильном порядке, чтобы получилась корректная программа, которая объявляет переменную с типом any, присваивает ей числовое значение, затем строковое, затем логическое, и выводит каждое значение в консоль. Программа должна показывать динамическую типизацию типа any, позволяющего переменной менять тип данных во время выполнения.
x = 10;console.log(x);console.log(x);console.log(x);x = 'text';x = false;let x: any;7. Конкатенация с any
В данном задании рассматривается работа с типом `any` в TypeScript. В приведённом фрагменте кода объявляется переменная с типом `any`, которая инициализируется числом, а затем к ней прибавляется строка. Проанализируйте код и определите, какая строка будет выведена в консоль. Введите полученную строку целиком, включая пробелы и знаки препинания, если они есть.
let value: any = 42;
let text: string = " apples";
value = value + text;
console.log(value);