Error
Error
はJavaScriptの組み込みAPIのひとつで例外を取り扱うためのオブジェクトです。
Errorオブジェクトの作り方
Error
オブジェクトを作るにはError
クラスをnew
します。例外を投げるためにはthrow
を使います。
ts
throw newError ();
ts
throw newError ();
JavaScriptではErrorクラス以外も例外としてthrowできる
とはいえ、JavaScriptでは例外を表すError
クラスとそのサブクラスだけをthrow
できるのではなく、どのような値もthrow
できます。
ts
throw "id is not string!";
ts
throw "id is not string!";
Errorクラスのサブクラス
組み込みAPIとしてError
には次のサブクラスがあります。
- EvalError
- InternalError
- RangeError
- ReferenceError
- SyntaxError
- TypeError
- URIError
またError
を拡張し独自のサブクラスを定義することもできます。
ts
classCustomeError extendsError {public constructor(message ?: string) {super(message );}}consterr :CustomeError = newCustomeError ("FAILED!");console .log (err .name );console .log (err .message );console .log (err .stack );
ts
classCustomeError extendsError {public constructor(message ?: string) {super(message );}}consterr :CustomeError = newCustomeError ("FAILED!");console .log (err .name );console .log (err .message );console .log (err .stack );
例外を捕捉する
throw
された例外はcatch
で捕捉できます。ですが先ほど述べたようにJavaScriptはどのような値もthrow
できるのでcatch
した値の型は定まらずany
型かunknown
型として解釈されます。どちらの型になるかはtsconfig.jsonのuseUnknownInCatchVariables
の設定により決まります。
📄️ useUnknownInCatchVariables
例外捕捉catch(e)のeをunknown型として扱う
もし捕捉した値があるクラスのインスタンスまたはある型であるかを判定したい場合はinstanceof
, keyof
あるいは型ガードを使います。
ts
try {// ...} catch (e ) {if (e instanceofError ) {// ...}}
ts
try {// ...} catch (e ) {if (e instanceofError ) {// ...}}