TypeScriptでは、エラー処理を型安全に行うことでコードの信頼性を向上させることができます。
本記事では、try-catch構文を使用した例外処理を中心に、簡単なカスタムエラー型の定義方法や非同期エラー処理まで、エラーを型安全に扱う方法の基礎を解説します。
目次
例外処理の基本
JavaScriptと同様、TypeScriptでは構文を使って例外を処理します。ただし、TypeScriptでは例外オブジェクトの型を指定することで、コードの可読性や保守性を高めることができます。
以下のサンプルプログラムでは、意図的にエラーをスローして例外を発生させています。
try {
// 実行する処理
throw new Error("エラーが発生しました");
} catch (error) {
if (error instanceof Error) {
console.error(`エラー: ${error.message}`);
}
}
- error の型を Error として明示することで、型安全性を確保できます。
- instanceof を使用してエラーオブジェクトの種類を判定することができます。
カスタムエラー型の定義
TypeScriptでは、開発者自身がエラー型を定義することで、特定のエラーに対応した処理を記述できます。
class CustomError extends Error {
constructor(public code: number, message: string) {
super(message);
this.name = "CustomError";
}
}
try {
throw new CustomError(404, "リソースが見つかりません");
} catch (error) {
if (error instanceof CustomError) {
console.error(`エラーコード: ${error.code}, メッセージ: ${error.message}`);
}
}
- カスタムエラー型は、Error 型を継承(extends)します。
- カスタムエラー型を作成することで、エラーの種類や詳細を明確に伝えることができます。
非同期エラー処理
非同期処理では try-catch だけでなく、.catchメソッドを使ったエラーハンドリングも行われます。TypeScriptでは、非同期エラー処理でも型安全性を意識することが重要です。
try-catch を使用した非同期エラー処理
async function fetchData(): Promise<string> {
return new Promise((resolve, reject) => {
setTimeout(() => reject(new Error("データの取得に失敗しました")), 1000);
});
}
(async () => {
try {
const data = await fetchData();
console.log(data);
} catch (error) {
if (error instanceof Error) {
console.error(`非同期エラー: ${error.message}`);
}
}
})();
.catch メソッドを使用した非同期エラー処理
function fetchData(): Promise<string> {
return new Promise((resolve, reject) => {
setTimeout(() => reject(new Error("データの取得に失敗しました")), 1000);
});
}
fetchData()
.then((data) => {
console.log(`データ: ${data}`);
})
.catch((error) => {
if (error instanceof Error) {
console.error(`エラー: ${error.message}`);
}
});
使い分けの基準
- try-catch が選択されるケース:
- 可読性を重視したい場合: 特に async/await を使ったコードは、同期的なコードに見えるため、複雑な処理を記述する場合に可読性が向上します。
- 複数のエラーが発生する可能性がある場合: 一つの try ブロック内で複数の非同期処理を実行する場合、まとめてエラー処理を行えます。
- .catch が選択されるケース:
- Promiseチェーンを利用する場合: Promiseチェーンを使ったコードでは .catch メソッドでエラーを処理するのが一般的です。
- シンプルな非同期処理の場合: 短い処理や、関数呼び出しごとに個別のエラー処理を行いたい場合に適しています。
昨今のモダンなTypeScript/JavaScriptのコードでは、async/await と try-catch の組み合わせが主流です。これにより、非同期処理が同期的なコードと同じような構造になり、理解しやすいコードを書くことができます。
一方で、.catch メソッドも依然として広く使われており、特にPromiseチェーンを利用する場面や短い処理では便利です。
まとめ
エラー処理はアプリケーションの安定性を確保するために重要な部分です。
本記事で紹介した try-catch と .catch メソッドを効果的に使い分けることで、非同期処理も含めて型安全で信頼性の高いコードを実現できます。
本記事についての質問、誤りの指摘、ご意見ご感想などありましたら、ぜひコメント頂ければ幸いです。
それでは、最後までお読みいただき、ありがとうございます。

コメント