@Voindf

Как обратится к тексту ошибки в typescript?

Здравствуйте, в Error есть прототип - error.prototype.message
https://developer.mozilla.org/en-US/docs/Web/JavaS...
Но как к нему обращаться если тип ошибки unknown
К примеру в таком коде
async function myFoo() {
  try {
    const response = await fetch(
      "https://jsonplacfeholder.typicode.com/todos?_limit=10"
    );

    if (!response.ok) {
      throw new Error("Fetching Error!");
    }
    const data = await response.json();

    return data;
  } catch (error) {
    alert(error.message);
  }
}

https://www.typescriptlang.org/play?#code/IYZwngdg...
Как можно улучшить такой код
  • Вопрос задан
  • 420 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Alwafor
В JS error может быть представлен любым типом данных, например throw 'error', throw new Error('Error!') будут синтаксически корректны. Поэтому TypeScript по умолчанию выводит тип ошибки как any.

Однако мы можем предположить, что это за ошибка и корректно обратиться к полю message следующим образом:
catch(error) {
  if(error instanceof Error)
    alert(error.message) // TS теперь знает, что тут есть поле message
}

Или другой способ, если мы точно уверены, что выбрасываемая ошибка имеет определённый тип, мы можем использовать утверждение типа (type assertion), и код будет выглядеть следующим образом:
catch(error) {
  let e = error as Error
  alert(e.message)
}

Однако первый способ определённо лучше, ведь мы можем обработать ожидаемый тип ошибки (в данном случае, Error), а для всех остальных предусмотреть другое поведение.
Ответ написан
Комментировать
@romaro
Вы также можете отключить вывод типа unknown для переменных, которые приходят в catch. Для этого внесите изменение в tsconfig:
{
	"compilerOptions": {
               "strict": true,
               "useUnknownInCatchVariables": "false"
        },
}


Теперь такие переменные будут приводиться к any.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы