2

Javaのように、TypeScriptで例外(原因)をネスト/ラップすることは可能ですか?私が意味するTypeScriptの例外ネスト/ラッピング

try { 
    // do something 
} catch (e) { 
    throw new MyException("Exception while doing something", e); 
} 

それはcauseとしてe引数に渡すために、おそらくちょうどMyExceptionのカスタムctorのを持っている問題ではないのですが、何(印刷)を報告については、スタックは、後にトレース?あなたは、スタックトレースを探しているなら

+1

問題は、 'e'のタイプが何であるかわからないことです。 javascriptでは、数値、文字列、エラー、配列など、何もスローすることはできますが、コード内で何をしたのかはまったく問題ありません。私は[スロー句と型付きキャッチ句](https://github.com/Microsoft/TypeScript/issues/13219)のための機能を要求しました。これは簡単になります(私の意見では) –

+0

ありがとう。 Upvoted。 'e'が例外である場合にランタイムチェックを行い、後で報告/印刷用のスタックトレースを抽出できるようになればどうなるでしょうか(a'la' printStackTrace')?そのようなパターン/コードが存在していますか? – KarolDepka

+0

@KarolDepka 'console.log(e instanceof Error、e.stack);' – Thomas

答えて

1

あなたはこれを行うことができます。その後、

function normalizeError(e: any): Error { 
    if (e instanceof Error) { 
     return e; 
    } 

    return new Error(typeof e === "string" ? e : e.toString()); 
} 

とを:

Error: 1,string,true
at normalizeError (:5:12)
at :11:9

の場合:のようなものを出力します

try { 
    throw [1, "string", true]; 
} 
catch (e) { 
    e = normalizeError(e); 
    console.log(e.stack); 
} 

es6をターゲットにしている場合は、 Errorクラスを延長することができます。彼の normalizeError関数ですが、 es6をターゲットできない場合は、ネイティブクラスを拡張しないでください。

関連する問題