TypeScriptのエラー処理
この記事ではTypeScriptのエラー処理について説明します。
YouTube Video
TypeScriptにおけるエラー処理
TypeScriptにおけるエラー処理は、基本的にはJavaScriptと同じくtry...catch
構文を使って行います。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
をチェックして、ステータスコードがOKでない場合にエラーを投げています。エラーはcatch
でキャッチされ、適切にログが出力されます。
まとめ
TypeScriptでは型を使ってエラーの内容を明確にすることができ、エラー処理がより安全かつ読みやすくなります。エラー処理の際には、どのような型のエラーが発生する可能性があるかを明確にし、それに応じた処理を行うことが大切です。
Error
TypeScriptにおけるError
クラスは、JavaScriptのError
クラスを拡張しており、エラーを表現するための基本的なオブジェクトです。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}
まとめ
TypeScriptにおけるError
クラスは、標準のエラーハンドリングを行うための基本となるクラスです。さらに、Error
クラスを拡張してカスタムエラーを作成することで、エラーの種類や追加情報に応じた柔軟なエラーハンドリングが可能になります。
YouTubeチャンネルでは、Visual Studio Codeを用いて上記の記事を見ながら確認できます。 ぜひYouTubeチャンネルもご覧ください。