Как читать сообщения об ошибках
Все сообщения об ошибках TypeScript устроены одинаково, и когда вы умеете их читать, они говорят очень многое. В этой программе три ошибки:
const hero = { name: "Кира", health: 50 };
let potions = 2;
console.log("Здоровье:", hero.helth);
console.log("Зелья:", potoins);
console.log("Стрелы:", arrows);TypeScript сообщает обо всех трёх сразу, по одной на строку:
main.ts(4,31): error TS2551: Property 'helth' does not exist on type '{ name: string; health: number; }'. Did you mean 'health'?
main.ts(5,23): error TS2552: Cannot find name 'potoins'. Did you mean 'potions'?
main.ts(6,24): error TS2304: Cannot find name 'arrows'.Читайте каждую строку слева направо:
main.ts— файл с ошибкой, тот, что в редакторе.(4,31)— место: строка 4, столбец 31. Номера строк видны слева от редактора. Столбец показывает, какой по счёту это символ в строке, считая с 1 и включая пробелы. TypeScript указывает на начало того, что не так, здесь — на первую буквуhelth.error TS2551говорит, что это ошибка, аTS2551— её код. У каждого вида ошибок свой номер. Если сообщение вам непонятно, поищите в интернете его код, например «TS2551», и найдёте объяснения и примеры.- После двоеточия идёт описание на английском.
Property 'helth' does not exist on type '{ name: string; health: number; }'означает, что у объекта нет свойстваhelth. То, что в кавычках, — тип объекта: объект со свойствомname, которое является строкой (string), и свойствомhealth, которое является числом. TypeScript вычислил это по объекту из строки 1.
Когда неверное имя похоже на существующее, TypeScript добавляет подсказку Did you mean 'health'? («Вы имели в виду 'health'?»), и обычно она верна. Подсказки бывают и для свойств (TS2551), и для переменных: Cannot find name 'potoins' (TS2552) значит, что TypeScript не знает переменной potoins, зато знает potions. Когда похожих имён нет, вы получаете просто Cannot find name 'arrows' (TS2304): в программе нет переменной arrows. Возможно, вы забыли её создать или назвали иначе.
TypeScript проверяет всю программу и сообщает обо всех найденных ошибках типов. Начинайте с первой: исправьте её и запустите программу снова. Одна ошибка может породить несколько сообщений. Если вы неправильно написали имя переменной там, где её создаёте, то каждая строка, использующая переменную, сообщит об ошибке, а одно исправление уберёт их все.
И наоборот: после исправления могут появиться новые ошибки. Прежде чем проверять типы, TypeScript проверяет, правильно ли написана сама программа: все ли скобки и кавычки на месте. Если с этим что-то не так, TypeScript сообщает только об этом и не проверяет типы, пока вы не исправите ошибку:
const hero = { name: "Кира", health: 50 };
console.log("Здоровье:", hero.health;main.ts(2,37): error TS1005: ')' expected.')' expected означает, что TypeScript ожидал здесь ), на точке с запятой, потому что скобка у console.log( не закрыта.
Задание
- 1
Программа в редакторе приветствует Киру в таверне, но в ней три ошибки. Запустите её: TypeScript сообщит только об одной из них — ошибке в том, как написана программа. Исправьте её и запустите программу снова. Теперь TypeScript покажет две остальные. Исправьте и их, чтобы программа вывела:
Добро пожаловать в таверну Золотой кубок Хозяин: Бруно Кира заказывает суп. Осталось золота: 105