Obsługa błędów w TypeScript
Ten artykuł wyjaśnia obsługę błędów w TypeScript.
YouTube Video
Obsługa błędów w TypeScript
Obsługa błędów w TypeScript odbywa się zasadniczo za pomocą konstrukcji try...catch
, tak jak w JavaScript. W TypeScript możliwe jest wyraźniejsze zarządzanie treścią błędów dzięki wnioskowaniu typów. To pozwala na bardziej precyzyjną i czytelną obsługę błędów.
Składnia try...catch
Podstawowa składnia obsługi błędów wygląda następująco:.
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}
Typowo bezpieczna obsługa błędów
W TypeScript błędy przechwycone w bloku catch
są traktowane jako typ any
, ale zaleca się określenie odpowiedniego typu dla bezpieczniejszej obsługi błędów. Na przykład można zdefiniować i używać niestandardowego typu błędu w następujący sposób:.
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}
W tym przykładzie tworzona jest klasa o nazwie CustomError
, a następnie wyrzucany jest błąd z własnymi właściwościami, takimi jak errorCode
. W bloku catch
użyj instanceof
, aby określić typ błędu i podjąć odpowiednie działania.
Asynchroniczna obsługa błędów
W TypeScript konstrukcja try...catch
jest również używana do obsługi błędów podczas korzystania z funkcji asynchronicznych.
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();
W tym przykładzie dane są pobierane za pomocą fetch
, a response.ok
jest sprawdzane, aby zgłosić błąd, jeśli kod statusu nie jest OK. Błąd jest przechwytywany w catch
, a odpowiedni log jest wyświetlany.
Podsumowanie
W TypeScript używanie typów do wyjaśnienia treści błędów sprawia, że obsługa błędów jest bezpieczniejsza i bardziej czytelna. Podczas obsługi błędów ważne jest, aby wyjaśnić, jakie typy błędów mogą wystąpić, i odpowiednio je obsłużyć.
Błąd
Klasa Error
w TypeScript rozszerza klasę Error
w JavaScript i jest podstawowym obiektem do reprezentowania błędów. Korzystając z klasy Error
, można utworzyć obiekt zawierający komunikat o błędzie i przeprowadzić obsługę błędów.
Podstawy klasy Error
Klasa Error
jest używana w następujący sposób.
1const error = new Error("Something went wrong!");
2console.log(error.message); // "Something went wrong!"
3console.log(error.name); // "Error"
Właściwości
Klasa Error
posiada następujące właściwości:.
- message Ciąg znaków reprezentujący komunikat błędu.
- name
Nazwa błędu. Domyślnie jest to
"Error"
, ale można to zmienić, tworząc własną klasę błędu. - stack Informacje o śladzie stosu wykorzystywane podczas debugowania. Ciąg znaków wskazujący, który kod spowodował błąd w momencie jego wystąpienia.
Własna Klasa Błędów
Można również rozszerzyć klasę Error
i stworzyć własne klasy błędów. Jest to przydatne w sytuacjach, gdy wymagane jest określone zarządzanie błędami. Na przykład jest to skuteczne, gdy chcesz obsługiwać różne typy błędów, takie jak błędy żądań HTTP lub błędy bazy danych.
Przykład Tworzenia Własnego Błędu
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
- Tworząc klasę
CustomError
i dodając informacje takie jak kody błędów, możesz zarządzać bardziej szczegółowymi informacjami o błędach.
Dziedziczenie Klasy Error
W TypeScript, przy tworzeniu własnej klasy błędu poprzez rozszerzenie klasy Error
, należy zwrócić uwagę na kilka kwestii.
-
Wywołanie
super()
W konstruktorze własnej klasy błędu należy wywołaćsuper()
, aby wywołać konstruktor klasyError
. Zapewnia to poprawną inicjalizację właściwościmessage
istack
. -
Dodawanie właściwości Jeśli chcesz dodać do obiektu błędu dodatkowe informacje, zdefiniuj nowe właściwości w klasie. Na przykład w powyższym
CustomError
została dodana właściwośćerrorCode
.
Rzucanie i Obsługa Błędów
Możesz obsługiwać błędy, wyrzucając je z użyciem klasy Error
lub własnej klasy błędów, a następnie je przechwytując.
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}
W przypadku własnych błędów również używaj instanceof
, aby zidentyfikować konkretne błędy i odpowiednio je obsłużyć.
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}
Podsumowanie
Klasa Error
w TypeScript to podstawowa klasa służąca do wykonywania standardowej obsługi błędów. Ponadto, rozszerzając klasę Error
, aby tworzyć własne błędy, możliwa staje się elastyczna obsługa błędów w oparciu o ich typy i dodatkowe informacje.
Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.