async
関数を使用して、型付きエラーで約束を拒否する既存の約束ベースのAPIを呼び出しています。あなたはこのように、この動作を模擬できどのように非同期catch()で型付きエラーを使用しますか
:私はエラーに注釈を付けるしようとした場合
api().catch((error: ApiError) => console.log(error.code, error.message))
しかしasync
を使用して:約束と今
interface ApiError {
code: number;
error: string;
}
function api(): Promise<any> {
return new Promise((resolve, reject) => {
reject({ code: 123, error: "Error!" });
});
}
、私はApiError
にエラーの種類に注釈を付けることができますタイプ:try ... catch()
:
async function test() {
try {
return await api();
} catch (error: ApiError) {
console.log("error", error);
}
}
これはエラーでコンパイル:
Catch clause variable cannot have a type annotation.
どのように、そして、私は私が期待していエラーの種類を知っていますか? catch()
ブロックにアサーションを書く必要がありますか?これは非同期のバグ/不完全な機能ですか?
ありがとうございました。私は 'Promise.catch()'に型引数がないのと同じ理由だと思います。それでも、私は、私が期待しているエラーを書き留めておきたいと思います。TSの多くはあなたが期待しているものを書いているだけです。確かに、あなたのタイプのどれもが実行時に真実になるという保証はありません! – Aaron
@Aaron catchブロック内で 'const apiError:ApiError = error;'を実行することができます(エラーは 'any'型です) –
これは私がやっていることです。その約束は少し簡潔です。 – Aaron