Обработка ошибок в TypeScript
В этой статье объясняется обработка ошибок в TypeScript.
YouTube Video
Обработка ошибок в TypeScript
Обработка ошибок в TypeScript в основном выполняется с использованием конструкции try...catch
, так же как и в JavaScript. В TypeScript можно более четко управлять содержимым ошибок с помощью вывода типов. Это позволяет выполнять более точную и читаемую обработку ошибок.
Синтаксис try...catch
Базовый синтаксис обработки ошибок следующий:.
1try {
2 // Code that may throw an error
3 throw new Error("Something went wrong!");
4} catch (error) {
5 // Catch and handle the error
6 console.error("Error:", error);
7} finally {
8 // Code that runs regardless of whether an error occurred
9 console.log("Finally block executed.");
10}
Типобезопасная обработка ошибок
В TypeScript ошибки, пойманные блоком catch
, рассматриваются как тип any
, но рекомендуется указывать соответствующий тип для более безопасной обработки ошибок. Например, вы можете определить и использовать пользовательский тип ошибки следующим образом:.
1class CustomError extends Error {
2 constructor(message: string, public errorCode: number) {
3 super(message);
4 this.name = "CustomError";
5 }
6}
7
8try {
9 throw new CustomError("Invalid operation", 400);
10} catch (error) {
11 if (error instanceof CustomError) {
12 console.error(`Error: ${error.message}, Code: ${error.errorCode}`);
13 } else {
14 console.error("Unknown error occurred");
15 }
16}
В этом примере создаётся класс с именем CustomError
, и выбрасывается ошибка с пользовательскими свойствами, такими как errorCode
. В блоке catch
используйте instanceof
, чтобы определить тип ошибки и выполнить соответствующую обработку.
Асинхронная обработка ошибок
В TypeScript конструкция try...catch
также используется для обработки ошибок при использовании асинхронных функций.
1async function fetchData() {
2 try {
3 const response = await fetch("https://api.example.com/data");
4 if (!response.ok) {
5 throw new Error(`HTTP error! status: ${response.status}`);
6 }
7 const data = await response.json();
8 console.log(data);
9 } catch (error) {
10 console.error("Failed to fetch data:", error);
11 }
12}
13
14fetchData();
В этом примере данные извлекаются с помощью fetch
, и проверяется response.ok
, чтобы выбросить ошибку, если код состояния не в порядке. Ошибка перехватывается в блоке catch
, и выводится соответствующий лог.
Резюме
В TypeScript использование типов для уточнения содержания ошибок делает обработку ошибок более безопасной и читаемой. При обработке ошибок важно уточнить, какие типы ошибок могут возникнуть, и обрабатывать их соответствующим образом.
Ошибка
Класс Error
в TypeScript расширяет класс Error
в JavaScript и представляет собой базовый объект для представления ошибок. С помощью класса Error
вы можете создавать объект, содержащий сообщение об ошибке, и выполнять обработку ошибок.
Основы класса Error
Класс Error
используется следующим образом.
1const error = new Error("Something went wrong!");
2console.log(error.message); // "Something went wrong!"
3console.log(error.name); // "Error"
Свойства
Класс Error
имеет следующие свойства:.
- message Строка, представляющая сообщение об ошибке.
- name
Имя ошибки. По умолчанию это
"Error"
, но его можно изменить, создав пользовательский класс ошибки. - stack Информация о трассировке стека, используемая для отладки. Строка, указывающая, какой код вызвал ошибку в момент её возникновения.
Пользовательский класс ошибки
Также возможно расширить класс Error
и создавать собственные классы ошибок. Это полезно в ситуациях, когда требуется конкретная обработка ошибок. Например, это эффективно, когда вы хотите обрабатывать различные типы ошибок, такие как ошибки HTTP-запросов или ошибки базы данных.
Пример создания пользовательской ошибки
1class CustomError extends Error {
2 constructor(message: string, public errorCode: number) {
3 super(message); // Call the constructor of the parent class 'Error'
4 this.name = "CustomError"; // Set the name of the error
5 }
6}
7
8const customError = new CustomError("Invalid operation", 400);
9console.log(customError.message); // "Invalid operation"
10console.log(customError.name); // "CustomError"
11console.log(customError.errorCode); // 400
- Создав класс
CustomError
и добавив информацию, такую как коды ошибок, вы можете управлять более полной информацией об ошибках.
Наследование класса Error
В TypeScript при создании пользовательского класса ошибки, расширяющего класс Error
, есть несколько моментов, на которые следует обратить внимание.
-
Вызов
super()
В конструкторе пользовательского класса ошибок необходимо вызватьsuper()
, чтобы вызвать конструктор классаError
. Это гарантирует, что свойстваmessage
иstack
будут корректно инициализированы. -
Добавление свойств Если вы хотите добавить дополнительную информацию в объект ошибки, определите новые свойства внутри класса. Например, в вышеуказанном
CustomError
добавлено свойствоerrorCode
.
Генерация и обработка ошибок
Вы можете обрабатывать ошибки, выбрасывая их с помощью класса Error
или пользовательского класса ошибок, а затем перехватывая их.
1function riskyOperation() {
2 throw new Error("Something went wrong during the operation");
3}
4
5try {
6 riskyOperation();
7} catch (error) {
8 if (error instanceof Error) {
9 console.error(error.message); // "Something went wrong during the operation"
10 console.error(error.name); // "Error"
11 }
12}
В случае пользовательских ошибок также используйте instanceof
, чтобы идентифицировать конкретные ошибки и обрабатывать их соответствующим образом.
1class CustomError extends Error {
2 constructor(message: string, public errorCode: number) {
3 super(message);
4 this.name = "CustomError";
5 }
6}
7
8try {
9 throw new CustomError("Database connection failed", 500);
10} catch (error) {
11 if (error instanceof CustomError) {
12 console.error(`Error: ${error.message}, Code: ${error.errorCode}`);
13 }
14}
Резюме
Класс Error
в TypeScript является базовым классом для выполнения стандартной обработки ошибок. Кроме того, расширяя класс Error
для создания пользовательских ошибок, становится возможной гибкая обработка ошибок на основе их типов и дополнительной информации.
Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.