回答:
誰かがコメントでこのリンクをMDNに投稿しました、そしてそれは非常に役に立ちました。ErrorTypesのようなものを非常に徹底的に説明しています。
EvalError ---グローバル関数eval()に関して発生するエラーを表すインスタンスを作成します。
InternalError --- JavaScriptエンジンの内部エラーがスローされたときに発生するエラーを表すインスタンスを作成します。たとえば、「再帰が多すぎます」。
RangeError ---数値変数またはパラメーターが有効範囲外の場合に発生するエラーを表すインスタンスを作成します。
ReferenceError ---無効な参照を逆参照するときに発生するエラーを表すインスタンスを作成します。
SyntaxError --- eval()でコードを解析中に発生する構文エラーを表すインスタンスを作成します。
TypeError ---変数またはパラメーターが有効なタイプでない場合に発生するエラーを表すインスタンスを作成します。
URIError --- encodeURI()またはdecodeURI()に無効なパラメーターが渡されたときに発生するエラーを表すインスタンスを作成します。
JavaScriptの範囲外の規則はを使用していRangeError
ます。タイプを確認するには、if / else + instanceof
最も固有のものから最も一般的なものまでを使用します
try {
throw new RangeError();
}
catch (e){
if(e instanceof RangeError){
console.log('out of range');
}
}
else { throw; }
ここに追加する必要があると思います
例外によってメッセージを発行および表示するシンプルなソリューション。
try {
throw new TypeError("Error message");
}
catch (e){
console.log((<Error>e).message);//conversion to Error type
}
ブロックからどのようなエラーが発生するかわからない場合、上記は解決策ではありません。このような場合は、タイプガードを使用し、適切なエラーに対する適切な処理を行う必要があります。@ Moriartyの回答をご覧ください。
<Error>
TSコンパイラに伝えることです。ただし、キャストはJSにまったく変換されず、純粋に構文上の砂糖であることに注意してください。e
<Error>
switchステートメントを忘れないでください。
default
。instanceof
スーパークラスで一致できます。constructor
は正確なクラスで一致します。function handleError() {
try {
throw new RangeError();
}
catch (e) {
switch (e.constructor) {
case Error: return console.log('generic');
case RangeError: return console.log('range');
default: return console.log('unknown');
}
}
}
handleError();
RangeError
。カスタムタイプを定義する必要がありますか、それとも単に定義しますthrow new Error("<message>");
か?