Выбор ответа Junior tsconfig и декларации обновлено

Тип ошибки в catch

Вопрос

Что скажет компилятор при strict: true?

try {
  JSON.parse('{');
} catch (e) {
  console.log(e.message);
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Ошибка: e имеет тип unknown. Флаг useUnknownInCatchVariables входит в strict (с TypeScript 4.4): переменная в catch получает тип unknown, потому что бросить можно что угодно, не только Error.

Варианты ответа

  1. Всё компилируется: e имеет тип Error
  2. Ошибка: у catch нужно указать тип e: Error
  3. Всё компилируется: e имеет тип any
  4. Ошибка: e имеет тип unknownправильный ответ

Разбор

Флаг useUnknownInCatchVariables входит в strict (с TypeScript 4.4): переменная в catch получает тип unknown, потому что бросить можно что угодно, не только Error. Обращение к e.message без сужения запрещено. Правильно: if (e instanceof Error) e.message.

any был по умолчанию до этого флага. Аннотацию e: Error в catch написать нельзя: разрешены только any и unknown.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме