TypeScript で try catch および finally ステートメントを実行するにはどうすればよいでしょうか? 質問する

TypeScript で try catch および finally ステートメントを実行するにはどうすればよいでしょうか? 質問する

プロジェクトにエラーがあり、これを処理するには試すキャッチそしてついに

これは JavaScript では使用できますが、Typescript では使用できません。

私が例外タイプスクリプトの引数としてキャッチ声明ですが、なぜこれを受け入れないのでしょうか?

ここにコードがあります。

private handling(argument: string): string {
    try {
        result= this.markLibrary(argument);
    }
    catch(e:Exception){
        result = e.Message;
    }
    return result;
}

ここで例外メッセージが必要ですが、取得できません。そして、以下のエラーが発生しました。

catch 句変数には型注釈を付けることはできません。

ベストアンサー1

編集

unknownTypescript 4.0では、キャッチ変数を指定する機能が追加されましたany問題unknown) そしてTypeScript 4.4では、catch変数にデフォルトを設定する機能が追加されました(広報)useUnknownInCatchVariablesフラグを使用します。

このフラグを使用すると、次のことが可能になります。

catch(e){
    result = e.message; // error under useUnknownInCatchVariables 
    if (typeof e === "string") {
        e.toUpperCase() // works, `e` narrowed to string
    } else if (e instanceof Error) {
        e.message // works, `e` narrowed to Error
    }
}

catch 変数に任意の型を指定することはまだサポートされていません。

元の回答

Typescriptはcatch変数の注釈をサポートしていません。これを許可する提案はありますが、まだ議論中です(ここ)。

唯一の解決策は、型アサーションまたは追加の変数を使用することです。

catch(_e){
    let e:Error= _e;
    result = e.message;
}

catch(e){
    result = (e as Error).message;
}

残念ながら、これも同様に機能し、完全にチェックされていません。

catch(e){
    result = e.MessageUps;
}

注記

提案に関する議論を読んでわかるように、JS ではスローされるものすべてがインスタンスである必要はないのでError、この仮定には注意してください。

おそらく、tslint を使用するとno-unsafe-anyこれを検出できるでしょう。

おすすめ記事