Type Assertions (утверждения типов) — это способ сообщить компилятору TypeScript: «Я знаю тип этого значения лучше тебя». Синтаксис угловых скобок (<Тип>значение) — один из способов сделать такое утверждение. Это как инструкция для тренажера TypeScript, которая говорит, как интерпретировать данные.
Утверждения типов не выполняют никакой проверки или преобразования данных во время выполнения (runtime). Они работают только на этапе компиляции и используются, когда разработчик обладает дополнительными знаниями о типе, которые TypeScript вывести не может (например, при работе с DOM API или при получении данных извне).
Пример: let someValue: any = 'это строка';
let strLength: number = (
Важно использовать их осторожно, чтобы не подавить реальные ошибки типов. Интерактивные задания и примеры в этом уроке помогут вам понять, когда применение угловых скобок оправдано, а когда от них лучше отказаться. Бесплатный онлайн-тренажер с визуализацией кода — отличный способ потренировать этот навык.
- Модуль 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. Вставь утверждение типа
В этом задании вам нужно дополнить фрагмент кода на TypeScript, используя утверждение типа с помощью угловых скобок. Переменной `data` присвоен тип `any`, и к ней нужно обратиться, чтобы получить свойство `.length`. Вставьте недостающее утверждение типа, чтобы код компилировался и корректно выводил длину строки. Обратите внимание, что после утверждения типа можно использовать свойства, характерные для указанного типа.
let data: any = "Hello, TypeScript!";
let length: number = (input1S).length;
console.log(length);2. Найди ошибочное утверждение
В этом фрагменте TypeScript-кода используется несколько утверждений типов через угловые скобки. Одно из них приводит к ошибке — после утверждения типа происходит попытка обратиться к свойству, которого у этого типа не существует. Найдите и исправьте строку с ошибкой, чтобы код стал рабочим.
let data: any = { name: 'Alice', age: 30 };let person = <{ name: string, age: number }>data;console.log(person.name);let coordinates = <{ x: number, y: number }>data;console.log(coordinates.x);3. Раздели корректные и некорректные утверждения
Перед вами 8 фрагментов кода TypeScript, содержащих утверждения типов с использованием угловых скобок (
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;let anotherValue: any = 123;
let numString: string = (<number>anotherValue).toString();interface Person { name: string; age: number; }
let obj: any = { name: "John", age: 30 };
let person = <Person>obj;let value: any = true;
let boolValue: boolean = <boolean>value;let x: number = 10;
let y: string = <string>x;let arr: number[] = [1, 2, 3];
let strArr: string[] = <string[]>arr;let num: any = "123";
let notNumber: number = <number>num;let something: unknown = "hello";
let len: number = (<string>something).length;4. Какой тип получится?
Проанализируйте приведённый фрагмент кода TypeScript, содержащий переменную типа `any` и несколько последовательных утверждений типов с использованием угловых скобок. Определите, какой тип TypeScript будет считать у переменной `result` на последнем шаге выполнения этого кода.
let data: any = 'Hello, TypeScript!';
let step1 = <string>data;
let step2 = <number>step1;
let result = <boolean>step2;5. Отметь все утверждения типа
Перед вами фрагмент кода на TypeScript, в котором используются утверждения типов (type assertions). Внимательно изучите код и отметьте все места, где применяется синтаксис угловых скобок `<Тип>` для утверждения типа. Не отмечайте другие конструкции, такие как объявления типов, аннотации типов или синтаксис `as`.
// Примеры утверждений типов с использованием угловых скобок
let someValue: any = "это строка";
let strLength1: number = {{~|~t1}}someValue.length;
let strLength2: number = ({{~|~t2}}someValue).length;
// Утверждение типа для числа
let numValue: any = 42;
let squared: number = {{~|~t3}}numValue * {{~|~t4}}numValue;
// Утверждение типа в условии
if ({{~|~t5}}someFlag) {
console.log("Флаг установлен");
}
// Утверждение типа для массива
let arr: any = [1, 2, 3];
let firstElement: number = {{~|~t6}}arr[0];
// Пример с дженериком (НЕ утверждение типа)
function identity{{~|~t7}}(arg: T): T {
return arg;
}
// Пример с аннотацией типа (НЕ утверждение типа)
let anotherValue: {{string~|~t8}} = "текст";
// Пример с синтаксисом 'as' (НЕ утверждение типа с угловыми скобками)
let yetAnotherValue = someValue as {{string~|~t9}}; 6. Восстанови порядок операций
Перед вами строки TypeScript-кода, демонстрирующие использование утверждения типа (type assertion) с помощью угловых скобок < >. Строки перемешаны. Восстановите их в правильном логическом порядке, чтобы получился рабочий код, который объявляет переменную с типом any, выполняет утверждение типа в string, а затем вызывает метод для строки. Всего 5 строк.
console.log(strLength);let assertedValue: string = <string>data;// Вывод: 10let data: any = "TypeScript";let strLength: number = assertedValue.length;7. Чему равно свойство?
В данном фрагменте кода TypeScript переменной типа `any` присваивается строковое значение. Затем с помощью утверждения типа (type assertion) с использованием угловых скобок `<тип>` переменная приводится к типу `string`, после чего у неё запрашивается свойство `length`. Определите, какое числовое значение будет сохранено в переменной `len` после выполнения этого кода. Введите одно число.
let value: any = "Assertion";
let len = (<string>value).length;8. Логика работы с DOM
Проанализируйте TypeScript-код сверху, который использует утверждение типа (угловые скобки) для работы с элементом DOM. Восстановите последовательность логических шагов выполнения программы. Шаги снизу перемешаны — расставьте их в правильном порядке, чтобы отразить, как программа получает элемент, проверяет его тип и обращается к свойству.
// Предположим, в DOM есть элемент: <input id="username" value="Иван">
const element = document.getElementById('username');
if (element) {
const inputElement = <HTMLInputElement>element;
const value = inputElement.value;
console.log(value);
}