Gestione degli errori in TypeScript
Questo articolo spiega la gestione degli errori in TypeScript.
YouTube Video
Gestione degli errori in TypeScript
La gestione degli errori in TypeScript viene fondamentalmente eseguita utilizzando la struttura try...catch
, proprio come in JavaScript. In TypeScript, è possibile gestire più chiaramente il contenuto degli errori tramite l'inferenza di tipo. Questo consente una gestione degli errori più precisa e leggibile.
Sintassi di try...catch
La sintassi base per la gestione degli errori è la seguente:.
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}
Gestione degli errori tipicamente sicura
In TypeScript, gli errori catturati all'interno di un blocco catch
vengono trattati come tipo any
, ma si consiglia di specificare il tipo appropriato per una gestione degli errori più sicura. Ad esempio, è possibile definire e utilizzare un tipo di errore personalizzato come mostrato di seguito:.
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}
In questo esempio viene creata una classe chiamata CustomError
e viene generato un errore con proprietà personalizzate come errorCode
. Nel blocco catch
, usa instanceof
per determinare il tipo di errore e eseguire la gestione appropriata.
Gestione degli errori asincrona
In TypeScript, try...catch
viene usato anche per gestire gli errori quando si utilizzano funzioni asincrone.
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();
In questo esempio, i dati vengono recuperati utilizzando fetch
, e viene controllato response.ok
per generare un errore se il codice di stato non è OK. L'errore viene catturato in catch
e viene visualizzato il log appropriato.
Riepilogo
In TypeScript, utilizzare i tipi per chiarire il contenuto degli errori rende la gestione degli stessi più sicura e leggibile. Quando si gestiscono errori, è importante chiarire quali tipi di errori potrebbero verificarsi e gestirli di conseguenza.
Errore
La classe Error
in TypeScript estende la classe Error
in JavaScript ed è un oggetto base per rappresentare gli errori. Utilizzando la classe Error
, è possibile creare un oggetto che include un messaggio di errore ed eseguire la gestione degli errori.
Basi della classe Error
La classe Error
viene usata come segue.
1const error = new Error("Something went wrong!");
2console.log(error.message); // "Something went wrong!"
3console.log(error.name); // "Error"
Proprietà
La classe Error
possiede le seguenti proprietà:.
- messaggio Una stringa che rappresenta il messaggio di errore.
- nome
Il nome dell’errore. Per impostazione predefinita, è
"Error"
, ma può essere modificato creando una classe di errore personalizzata. - stack Informazioni sullo stack trace utilizzate per il debug. Una stringa che indica quale codice ha causato l'errore al momento dell'occorrenza.
Classe di Errore Personalizzata
È anche possibile estendere la classe Error
e creare le proprie classi di errore. Questo è utile in situazioni in cui è necessaria una gestione specifica degli errori. Ad esempio, è efficace quando si vogliono gestire diversi tipi di errori come gli errori delle richieste HTTP o degli errori del database.
Esempio di Creazione di un Errore Personalizzato
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
- Creando una classe
CustomError
e aggiungendo informazioni come i codici di errore, è possibile gestire informazioni più dettagliate sugli errori.
Eredità della Classe Error
In TypeScript, quando si crea una classe di errore personalizzata estendendo la classe Error
, ci sono alcuni punti di cui essere cauti.
-
Chiamare
super()
Nel costruttore di una classe di errore personalizzata, è necessario chiamaresuper()
per invocare il costruttore della classeError
. Questo garantisce che le proprietàmessage
estack
siano inizializzate correttamente. -
Aggiunta di Proprietà Se desideri aggiungere informazioni aggiuntive all’oggetto errore, definisci nuove proprietà all’interno della classe. Ad esempio, nel
CustomError
sopra riportato, è stata aggiunta una proprietàerrorCode
.
Lanciare e Gestire gli Errori
Puoi gestire gli errori generandoli tramite la classe Error
o una classe di errore personalizzata e quindi intercettandoli.
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}
Anche nel caso di errori personalizzati, utilizzare instanceof
per identificare errori specifici e gestirli adeguatamente.
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}
Riepilogo
La classe Error
in TypeScript è una classe fondamentale per eseguire la gestione standard degli errori. Inoltre, estendendo la classe Error
per creare errori personalizzati, diventa possibile una gestione flessibile degli errori basata sui tipi di errore e su informazioni aggiuntive.
Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.