くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

JavaScript/TypeScriptで独自のエラークラスを利用する

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)
  }
}

以上!!

参考にしたサイト様