TypeScriptにおけるエラー処理の極意:try-catch-finally文を使いこなそう
TypeScriptにおけるtry-catch-finally文の詳細解説
TypeScriptは、JavaScriptを静的に型付けする言語です。型付けにより、コードの信頼性と保守性を向上させることができます。try-catch-finally文は、エラー処理に役立つ重要な構文です。この解説では、TypeScriptにおけるtry-catch-finally文の詳細について説明します。
try-catch-finally文は、コード実行中に発生する可能性のあるエラーを処理するための構文です。tryブロック内には、エラーが発生する可能性のあるコードを記述します。catchブロックには、エラーが発生したときに実行されるコードを記述します。finallyブロックには、エラーが発生しても発生しなくても必ず実行されるコードを記述します。
tryブロックは、エラーが発生する可能性のあるコードを記述する場所です。tryブロック内でエラーが発生すると、その後のコードは実行されずに、catchブロックにジャンプします。
try {
// エラーが発生する可能性のあるコード
} catch (error) {
// エラー処理コード
}
catchブロックは、tryブロック内で発生したエラーを処理する場所です。catchブロックには、エラーオブジェクトが引数として渡されます。エラーオブジェクトには、エラーに関する情報が含まれています。
try {
// エラーが発生する可能性のあるコード
} catch (error) {
console.error(error.message); // エラーメッセージを出力
}
finallyブロックは、tryブロックまたはcatchブロックが実行された後に必ず実行されるコードを記述する場所です。finallyブロックは、エラーが発生しても発生しなくても実行されます。
try {
// エラーが発生する可能性のあるコード
} catch (error) {
console.error(error.message); // エラーメッセージを出力
} finally {
// 必ず実行されるコード
}
try-catch-finally文の例
以下の例は、try-catch-finally文を使用して、ファイルを読み込むコードを示しています。
function readFile(fileName: string): string {
try {
const fileContent = fs.readFileSync(fileName, 'utf8');
return fileContent;
} catch (error) {
console.error(`ファイル読み込みエラー: ${error.message}`);
return '';
} finally {
console.log('ファイル読み込み処理完了');
}
}
この例では、tryブロック内でfs.readFileSync()
関数を使用してファイルを同期的に読み込んでいます。fs.readFileSync()
関数は、エラーが発生する可能性があります。エラーが発生した場合、catchブロックにジャンプし、エラーメッセージを出力します。finallyブロックでは、ファイル読み込み処理が完了したことをログ出力します。
try-catch-finally文は、TypeScriptにおける重要なエラー処理構文です。try-catch-finally文を適切に使用することで、コードをより堅牢かつ保守性の高いものにすることができます。
TypeScriptにおけるtry-catch-finally文のサンプルコード
interface User {
id: number;
name: string;
}
async function getUser(userId: number): Promise<User | null> {
try {
const response = await fetch(`https://jsonplaceholder.typicode.com/users/${userId}`);
if (!response.ok) {
throw new Error(`APIエラー: ${response.status}`);
}
const userData = await response.json();
const user: User = {
id: userData.id,
name: userData.name,
};
return user;
} catch (error) {
console.error(`ユーザー取得エラー: ${error.message}`);
return null;
} finally {
console.log('ユーザー取得処理完了');
}
}
このサンプルコードを以下のように実行できます。
getUser(1)
.then((user) => {
if (user) {
console.log(`ユーザー情報: ${user.id} - ${user.name}`);
} else {
console.log('ユーザー取得に失敗しました。');
}
})
.catch((error) => {
console.error(`予期せぬエラーが発生しました: ${error.message}`);
});
このコードを実行すると、以下の出力が得られます。
ユーザー情報: 1 - Leanne Graham
以下のサンプルコードは、try-catch-finally文をさまざまな状況で使用する方法を示しています。
- ファイルの読み書き
- ネットワーク接続
- データベース操作
- ユーザー入力の検証
TypeScriptにおけるtry-catch-finally文以外のエラー処理方法
Promiseのcatch()メソッド
Promiseは、非同期処理を扱うための便利な機能です。Promiseには、catch()
メソッドというエラー処理用のメソッドがあります。catch()
メソッドには、エラーオブジェクトが引数として渡されます。
function getUser(userId: number): Promise<User | null> {
return fetch(`https://jsonplaceholder.typicode.com/users/${userId}`)
.then((response) => {
if (!response.ok) {
throw new Error(`APIエラー: ${response.status}`);
}
return response.json();
})
.catch((error) => {
console.error(`ユーザー取得エラー: ${error.message}`);
return null;
});
}
この例は、Promiseのcatch()
メソッドを使用してエラー処理を行っています。catch()
メソッドは、Promiseチェーンの最後に配置する必要があります。
async
/await
構文は、Promiseをより簡単に記述するための構文です。async
/await
構文を使用すると、try-catch-finally文を使用する必要はありません。
async function getUser(userId: number): Promise<User | null> {
try {
const response = await fetch(`https://jsonplaceholder.typicode.com/users/${userId}`);
if (!response.ok) {
throw new Error(`APIエラー: ${response.status}`);
}
const userData = await response.json();
const user: User = {
id: userData.id,
name: userData.name,
};
return user;
} catch (error) {
console.error(`ユーザー取得エラー: ${error.message}`);
return null;
}
}
この例は、async
/await
構文を使用してエラー処理を行っています。async
/await
構文を使用すると、コードがより読みやすくなります。
エラーオブジェクトの型
TypeScriptでは、エラーオブジェクトの型を定義することができます。エラーオブジェクトの型を定義することで、エラー処理コードをより詳細に記述することができます。
interface APIError extends Error {
statusCode: number;
}
async function getUser(userId: number): Promise<User | null> {
try {
const response = await fetch(`https://jsonplaceholder.typicode.com/users/${userId}`);
if (!response.ok) {
const error: APIError = new Error(`APIエラー: ${response.status}`);
error.statusCode = response.status;
throw error;
}
const userData = await response.json();
const user: User = {
id: userData.id,
name: userData.name,
};
return user;
} catch (error) {
if (error instanceof APIError) {
console.error(`APIエラー: ${error.statusCode} - ${error.message}`);
} else {
console.error(`予期せぬエラーが発生しました: ${error.message}`);
}
return null;
}
}
この例は、APIError
というインターフェースを定義し、エラーオブジェクトの型として使用しています。APIError
インターフェースには、statusCode
というプロパティが定義されています。statusCode
プロパティには、APIエラーのステータスコードが格納されます。
typescript error-handling try-catch