前提
この記事は、初学者の私が、サバイバルTypeScriptで学んだこと+調べたことをまとめたものになります。
従って、経験則に基づいた発言ではないため、一部慣習とは違っていたり、認知にずれがあったりする可能性がありますので、ぜひコメントで指摘していただけると幸いです。
例外処理とは?
- コード実行時に例外、つまり「エラー」が発生した時の処理
- 基本的にJSに組み込まれた
Errorオブジェクト
が使われる -
throw
で投げ、try-catch
で捉える
throw
- エラーを投げる構文
- JS,TSでは
Error型
以外のあらゆる型の値を投げることができる(非推奨)
throw
//コンストラクタにメッセージを渡したエラーオブジェクトを新たに作成し、throwする
throw new Error("エラーが発生しました");
//プリミティブ型もthrowできる(非推奨)
throw "エラーだよ"
throw 1
try-catch
- エラーが発生し得る処理を
try
内に書き、catch
で捉える - あらゆる型を
throw
できるため、例外はany型として受け取る -
Error
型のサブクラスを参照し、エラーハンドリングを行うことができる -
JAVA
と違い、一つのtry
に一つのcatch
TypeScript5.0以降、ts-config
のuseUnknownInCatchVariables
を設定することで、より型安全なunknown
型でcatch
できる。
try-catch
try{
throw new Error("エラーが発生しました");
}catch(e){ //eはany型
console.log(
}
finally
- 例外の有無に関係なく実行される
- try-catchの後に実行される
try-catch
try{
throw new Error("エラーが発生しました");
}catch(e){
console.log(
}finally{
console.log("処理が終了しました")
}
throw、try-catchは非推奨?
エラーが型のチェックをすり抜けて返ってきたり(import
先でtry-catch
を使うべきか否か配慮する必要がある)、エラーの場所を特定しにくかったりするため、非推奨とする声もある
これらを防ぐために新たにResult型作成し、この値をthrowではなくreturnで返すと良いらしい。
Result型は正常な値とError型の両方に対応し、エラーハンドリングもできる。
まとめ
以上になります。例外処理への解像度が少し高くなりました!
当方初学者なため、認知のずれや、モダンな開発現場ではもう使わない表現などがありましたらコメントで指摘していただけると幸いです。😸