メインコンテンツまでスキップ

Error

ErrorはJavaScriptの組み込みAPIのひとつで例外を取り扱うためのオブジェクトです。

Errorオブジェクトの作り方

Errorオブジェクトを作るにはErrorクラスをnewします。例外を投げるためにはthrowを使います。

ts
throw new Error();
ts
throw new Error();

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
class CustomeError extends Error {
public constructor(message?: string) {
super(message);
}
}
 
const err: CustomeError = new CustomeError("FAILED!");
 
console.log(err.name);
"Error"
console.log(err.message);
"FAILED!"
console.log(err.stack);
"Error: FAILED! ..."
ts
class CustomeError extends Error {
public constructor(message?: string) {
super(message);
}
}
 
const err: CustomeError = new CustomeError("FAILED!");
 
console.log(err.name);
"Error"
console.log(err.message);
"FAILED!"
console.log(err.stack);
"Error: FAILED! ..."

例外を捕捉する

throwされた例外はcatchで捕捉できます。ですが先ほど述べたようにJavaScriptはどのような値もthrowできるのでcatchした値の型は定まらずany型かunknown型として解釈されます。どちらの型になるかはtsconfig.jsonのuseUnknownInCatchVariablesの設定により決まります。

📄️ useUnknownInCatchVariables

例外捕捉catch(e)のeをunknown型として扱う

もし捕捉した値があるクラスのインスタンスまたはある型であるかを判定したい場合はinstanceof, keyofあるいは型ガードを使います。

ts
try {
// ...
} catch (e) {
if (e instanceof Error) {
// ...
}
}
ts
try {
// ...
} catch (e) {
if (e instanceof Error) {
// ...
}
}