Оператор instanceof — это встроенный механизм JavaScript, который TypeScript использует как Type Guard (защитник типа). Он позволяет проверить, является ли объект экземпляром определенного класса.
Когда вы используете instanceof внутри условия if, TypeScript автоматически «сужает» (narrows) тип переменной внутри этого блока. Это позволяет безопасно обращаться к методам и свойствам, специфичным для данного класса. Синтаксис: if (obj instanceof MyClass) { ... }. Это незаменимый инструмент при работе с ООП и ошибками.
- Модуль 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. Ключевое слово
В этом задании вам нужно дополнить код, который проверяет, является ли переменная `error` экземпляром класса `Error`. Используйте оператор проверки типа, чтобы условие `if` корректно работало. После заполнения пропуска код должен вывести сообщение об ошибке, если переменная действительно является экземпляром `Error`.
const error = new Error('Что-то пошло не так');
if (error input1S Error) {
console.log(error.message);
}2. Результат проверки
Проанализируйте приведённый фрагмент кода на TypeScript. Создаётся экземпляр класса Date, после чего выполняются две проверки с помощью оператора instanceof. Вам необходимо предсказать результат выполнения каждой проверки — будет ли он true или false. Выберите вариант, который правильно указывает результаты обеих проверок.
const obj: Date = new Date();
console.log(obj instanceof Date); // ?
console.log(obj instanceof Array); // ?3. Блок сужения типа
Из предложенных строк соберите корректную TypeScript-программу, которая получает элемент по id 'myInput', проверяет, является ли он элементом HTMLInputElement с помощью instanceof, и если да — выводит его значение в консоль. Игнорируйте лишние строки, которые не требуются для решения. Программа должна состоять только из необходимых строк в правильном порядке.
const element = document.getElementById('myInput');if (element instanceof HTMLInputElement) { console.log(element.value);}const value = element.value;if (element instanceof HTMLDivElement) { console.log(element.innerHTML);} else { console.log("Not an input");4. Выбор свойства
В этом задании вам предстоит заполнить пропуски в коде TypeScript, используя выпадающие списки. Код демонстрирует использование оператора instanceof для сужения типа (type narrowing). Внутри блока if (animal instanceof Dog) нужно выбрать метод, доступный только экземплярам класса Dog, а в блоке else — общий метод, определённый в базовом классе Animal. Обратите внимание на доступные варианты в списке и выберите подходящие для каждого контекста.
class Animal {
move() {
console.log('Moving...');
}
}
class Dog extends Animal {
bark() {
console.log('Woof!');
}
}
function makeSound(animal: Animal) {
if (animal instanceof Dog) {
animal.input1S();
} else {
animal.input2S();
}
}
const myPet: Animal = new Dog();
makeSound(myPet);5. Опечатка в операторе
В этом фрагменте кода TypeScript допущена ошибка в операторе проверки типа. Найдите и исправьте строку с ошибкой, чтобы условие корректно определяло, является ли объект экземпляром указанного класса. Обратите внимание на правильное написание оператора.
class Animal {}let pet = new Animal();if (pet instanceOf Animal) { console.log('Это животное');}6. Логика обработки ошибок
Проанализируйте TypeScript-код сверху и восстановите последовательность логических шагов выполнения программы. Шаги снизу перемешаны — расставьте их в правильном порядке, чтобы отразить, как функция обрабатывает ошибку с использованием instanceof guard и сужения типа unknown.
function processError(error: unknown): string {
if (error instanceof Error) {
return `Ошибка: ${error.message}`;
} else {
throw new Error('Неизвестный тип ошибки');
}
}
// Пример вызова функции с разными входными данными
const result1 = processError(new Error('Сетевая ошибка'));
console.log(result1);
const result2 = processError('Просто строка');
console.log(result2);