Ошибки типизации при компиляции

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

Тренажер по TypeScript

Одна из главных причин изучения TypeScript — это безопасность типов. В отличие от JavaScript, ошибки несоответствия типов здесь отлавливаются на этапе компиляции, а не во время исполнения. Это урок про то, как читать и исправлять ошибки типизации.

Когда вы пытаетесь передать строку туда, где ожидается число, или обратиться к несуществующему свойству объекта, TypeScript выдаст ошибку. Понимание этих сообщений — ключевой навык.

В этом разделе вас ждут практические задания на поиск багов. Вы будете выступать в роли отладчика: находить места, где код нарушает контракт типов, и исправлять их. Тренировка включает задания на исправление неверных присваиваний, ошибок в аргументах функций и некорректных операций с массивами. Все упражнения доступны онлайн и бесплатно.

Список тем

1. Локализация ошибки

id: 40620_err_click_bug

Внимательно изучите представленный фрагмент кода на TypeScript. Ваша задача — найти и отметить все места, где происходит вызов метода, который не существует для типа данных переменной, что приведёт к ошибке типизации при компиляции. Не отмечайте корректные вызовы методов, объявления переменных или другие части кода.

Кликните по всем фрагментам, которые подходят под условие задания.
let num: number = 42;
let str: string = "hello";
let bool: boolean = true;
console.log({{num.toUpperCase()~|~t1}});
console.log({{str.toUpperCase()~|~t2}});
console.log({{bool.toUpperCase()~|~t3}});
let arr: number[] = [1, 2, 3];
console.log({{arr.toUpperCase()~|~t4}});
Сообщения
Проверить
Показать подсказку

2. Сопоставление ошибок

id: 40620_err_compare_msg

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

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
let age: number = "25";
function greet(name: string): void {
  console.log(`Hello, ${name}`);
}
greet(123);
interface User {
  id: number;
  name: string;
}
const user: User = { id: 1, name: "Alice", age: 30 };
const numbers: number[] = [1, 2, 3, "4"];
function getId(): number {
  return "abc123";
}
Object literal may only specify known properties, and 'age' does not exist in type 'User'.
Type 'string' is not assignable to type 'number'.
Type 'string' is not assignable to type 'number'.
Type 'string' is not assignable to type 'number'.
Argument of type 'number' is not assignable to parameter of type 'string'.
Сообщения
Проверить
Показать подсказку

3. Исправление типа данных

id: 40620_err_fix_assignment

В этом фрагменте кода TypeScript функция ожидает аргумент типа number, но при вызове передаётся значение типа string. Найдите строку с ошибкой и исправьте её, чтобы код успешно компилировался и выполнялся. Обратите внимание на типы данных и преобразование значений.

Найдите ошибку и исправьте
function calculateSquare(x: number): number {
  return x * x;
}
 
let inputValue: string = "9";
let result = calculateSquare(inputValue);
console.log(result);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Сборка безопасного кода

id: 40620_err_build_safe

Из предложенных строк соберите корректную TypeScript-функцию, которая принимает число, умножает его на 2 и возвращает результат. Функция должна быть строго типизирована, чтобы избежать ошибок компиляции. В решении не должно быть лишних строк, которые нарушают типизацию или логику работы. Убедитесь, что функция объявлена до её вызова, а результат выводится в консоль.

Перетяните в правильном порядке строки из одного блока в другой
function multiplyByTwo(num: number): number {
    return num * 2;
}
const result = multiplyByTwo(5);
console.log(result);
const wrongResult = multiplyByTwo('5');
    return num * 2 + '';
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Выбор корректного оператора

id: 40620_err_select_correct

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

Нужно правильно расставить в пропуски предложенные варианты
let a: number = 5;
let b: string = "10";
let sum = a input1S b;
let isEqual = a input2S b;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Предсказание поведения компилятора

id: 40620_err_predict_fail

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

Выберите правильный вариант ответа
function calculateArea(radius: number): number {
    return Math.PI * radius * radius;
}

let radiusValue: number = 10;
let userInput: string = "15";

let area1 = calculateArea(radiusValue);
let area2 = calculateArea(userInput);
Сообщения
Проверить
Показать подсказку

7. Разметка опасных мест

id: 40620_err_highlight_unsafe

В данном фрагменте кода TypeScript присутствует потенциально опасное место, связанное с конфликтом типов. Разметьте три элемента: переменную, её объявленный тип и значение, которое вызывает несоответствие типов. Для каждого выделенного сегмента выберите один из доступных типов: «Переменная», «Тип» или «Значение».

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
let {{age~|~t1}}: {{number~|~t2}} = {{'25'~|~t3}};
Значение
Переменная
Тип
Сообщения
Проверить
Показать подсказку

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

id: 40620_compiler

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

TS
Запустить тренажёр (TypeScript)
Это последнее упражнение модуля. Для закрепления знаний рекомендуем пройти тест:
Тест: Основы статической типизации в TypeScript
Тест: Основы статической типизации в TypeScript
Добро пожаловать в тест на проверку знаний основ языка программирования TypeScript. Этот тест разработан для оценки вашего понимания базовых принципов работы со строгой типизацией, которые являются фундаментом для написания надежного и масштабируемого кода.TypeScript расширяет возможности JavaScript, добавляя систему типов, что позволяет обнаруживать ошибки еще на ...

Визуализатор кода: TypeScript: Типизация и синонимы

id: 40620_visualizer

Адаптация скрипта синонимайзера под TypeScript. Урок демонстрирует, как типизация словаря (Record) и проверка на существование ключа (Type Guarding) помогают избежать ошибок выполнения.

0 / 0
Скорость:
Режим:
💡 Что происходит?
Загрузите пример для начала...
🤔
Проверка знаний
История шагов
Готов
НайтиКурс.Ру