web-dev-qa-db-ja.com

TypeScriptでcatchとfinallyステートメントを試すにはどうすればよいですか?

プロジェクトでエラーが発生しました。trycatchおよびfinallyを使用してこれを処理する必要があります。これはJavaScriptで使用できますが、TypeScriptでは使用できません。 TypeScript catchステートメントの引数としてExceptionを指定すると、これは受け入れられませんか?これがコードです。

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

ここに例外メッセージが必要ですが、取得できません。そして、私は以下のエラーを受け取りました。

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

8
Raja

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インスタンスである必要はないので、この仮定に注意してください

多分no-unsafe-anyを使ったtslintはこれを捕まえるのに役立つでしょう。

まず、result変数を定義する必要があります

let result;

第二に、eのタイプを定義することはできません-メッセージが言ったように、eのタイプを強制したい場合は、

catch(e){
    result = (e as Exception).Message;
}

または

catch(e){
    result = (<Exception>e).Message;
}

それ以外の場合、eのタイプはanyになるため、引き続き機能します。

catch (e) {
    result = e.Message;
}
1