gpt4 book ai didi

typescript - 你如何在 async catch() 中使用类型错误

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:05 25 4
gpt4 key购买 nike

我正在使用 async 函数来调用现有的基于 promise 的 API,该 API 拒绝带有类型错误的 promise。

你可以像这样模拟这种行为:

interface ApiError {
code: number;
error: string;
}

function api(): Promise<any> {
return new Promise((resolve, reject) => {
reject({ code: 123, error: "Error!" });
});
}

现在有了 promises,我可以将错误类型注释为 ApiError:

api().catch((error: ApiError) => console.log(error.code, error.message))

但是当使用 async 时,如果我尝试在 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() block 中编写断言?这是异步的错误/不完整功能吗?

最佳答案

在 TypeScript 中,catch 子句变量可能没有类型注释(除了 as of TypeScript 4.0unknown)。这不是特定于 async 的。这是 an explanation from Anders Hejlsberg :

We don't allow type annotations on catch clauses because there's really no way to know what type an exception will have. You can throw objects of any type and system generated exceptions (such as out of memory exception) can technically happen at any time.

您可以检查 catch 主体中是否存在 error.codeerror.message 属性(可选地使用 user-defined type guard )。

关于typescript - 你如何在 async catch() 中使用类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42618089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com