JavaScriptでカスタム例外クラスを作りたいなと思ったら、
めんどうだったので、その時調べたときの備忘録。
以下がすごく参考になった(´ω`)
・例外処理 — 仕事ですぐに使えるTypeScript ドキュメント
カスタム例外
こんな感じ。
export class CustomError extends Error { constructor(e?: string) { super(e); this.name = new.target.name; // Maintains proper stack trace for where our error was thrown (only available on V8) if (Error.captureStackTrace) { Error.captureStackTrace(this, this.constructor); } // https://future-architect.github.io/typescript-guide/exception.html // 下記の行はTypeScriptの出力ターゲットがES2015より古い場合(ES3, ES5)のみ必要 Object.setPrototypeOf(this, new.target.prototype); } }
フィールドを追加したいときには、constractorに追加すればOK。
class NetworkAccessError extends CustomError { constructor(public statusCode: number, e?: string) { super(e); } }
例外を受け取る
例外のcatch節内で、instanceof
を使えば、判別できる。
try { hoge(); } catch (e) { if (e instanceof NetworkAccessError) { console.log(`statusCode=${e.statusCode}`) } else { console.log(e) } }
以上!!