TypeScript エラー処理入門
TypeScriptにおけるtry-catchおよびfinally文の解説
TypeScriptでは、エラー処理の際に try-catch ブロックと finally ブロックを使用することができます。これにより、エラーが発生した場合の適切な処理や、エラーが発生しても必ず実行される処理を定義できます。
try-catchブロック
- エラーが発生した場合、 catch ブロック内のコードが実行されます。
- try ブロック内に実行したいコードを記述します。
try {
// エラーが発生する可能性のあるコード
const result = parseInt("abc"); // 文字列を数値に変換するとエラーが発生
console.log(result);
} catch (error) {
console.error("エラーが発生しました:", error);
}
finallyブロック
- エラーが発生しても発生しなくても、必ず実行されるコードを記述します。
- try ブロックまたは catch ブロックの後に実行されます。
try {
// エラーが発生する可能性のあるコード
const result = parseInt("abc"); // 文字列を数値に変換するとエラーが発生
console.log(result);
} catch (error) {
console.error("エラーが発生しました:", error);
} finally {
console.log("finallyブロックが実行されます");
}
重要なポイント
- try-catch ブロックはネストすることができます。
- finally ブロックは、return ステートメントや throw ステートメントの前に実行されます。
- catch ブロックの引数には、エラーオブジェクトを受け取ることができます。
例: カスタムエラー処理
function divide(a: number, b: number): number {
if (b === 0) {
throw new Error("ゼロによる除算はできません");
}
return a / b;
}
try {
const result = divide(10, 0);
console.log(result);
} catch (error) {
console.error("エラーが発生しました:", error.message);
}
例1: 基本的なエラー処理
try {
const result = parseInt("abc"); // 文字列を数値に変換するとエラーが発生
console.log(result);
} catch (error) {
console.error("エラーが発生しました:", error);
} finally {
console.log("finallyブロックが実行されます");
}
- finally ブロックは、エラーが発生しても発生しなくても、必ず実行されます。
- catch ブロック内でエラーオブジェクトが取得され、エラーメッセージがコンソールに出力されます。
- try ブロック内で
parseInt("abc")
を実行すると、文字列を数値に変換できないためエラーが発生します。
function divide(a: number, b: number): number {
if (b === 0) {
throw new Error("ゼロによる除算はできません");
}
return a / b;
}
try {
const result = divide(10, 0);
console.log(result);
} catch (error) {
console.error("エラーが発生しました:", error.message);
}
- try ブロック内で
divide
関数を呼び出すと、エラーが発生します。 divide
関数内で、除算する際に除数が0の場合はカスタムエラーを発生させます。
例3: ネストされたtry-catchブロック
try {
// エラーが発生する可能性のあるコード
const result = parseInt("abc");
console.log(result);
try {
// さらにエラーが発生する可能性のあるコード
const data = JSON.parse("invalid JSON");
console.log(data);
} catch (innerError) {
console.error("内側のエラー:", innerError);
}
} catch (outerError) {
console.error("外側のエラー:", outerError);
}
- 内側の try-catch ブロック内でエラーが発生すると、内側の catch ブロックが実行されます。
TypeScript エラー処理入門
エラーオブジェクトのプロパティ
- stack
スタックトレース - message
エラーメッセージ - name
エラーの名前 (e.g., "TypeError")
カスタムエラーの作成
new Error("エラーメッセージ")
を使用してカスタムエラーを作成できます。
オプショナルチェイニング (Optional Chaining)
- オブジェクトのプロパティがnullまたはundefinedの場合、アクセスせずにエラーを回避します。
const user = { name: "John" };
const address = user?.address?.street; // addressまたはstreetがnullまたはundefinedの場合、undefinedを返す
null合体演算子 (Nullish Coalescing Operator)
- nullまたはundefinedの場合にデフォルト値を指定します。
const username = user?.name ?? "Unknown"; // nameがnullまたはundefinedの場合、"Unknown"を返す
アサーション (Assertion)
- 型を強制的に指定します。ただし、誤った型を指定するとランタイムエラーが発生する可能性があります。
const data = JSON.parse("invalid JSON") as string[]; // JSON.parseの結果をstring[]型にアサート
カスタムエラーの作成
function divide(a: number, b: number): number {
if (b === 0) {
throw new Error("ゼロによる除算はできません");
}
return a / b;
}
Promiseのエラー処理
- 非同期処理でエラーが発生した場合、
catch
ブロックを使用して処理します。
fetch("https://api.example.com/data")
.then(response => response.json())
.catch(error => console.error("エラーが発生しました:", error));
typescript error-handling try-catch