gpt4 book ai didi

typescript - 缩小捕获中的错误类型

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

对于这段代码

try {
throw new CustomError();
}
catch (err) {
console.log(err.aPropThatDoesNotExistInCustomError);
}

errany 并且不会触发类型错误。如何将错误缩小到预期的错误类型?

最佳答案

您需要自己执行检查以缩小 catch block 内的范围。编译器不知道也不相信 err 一定会是 CustomError:

try {
throw new CustomError();
}
catch (err) {
console.log('bing');
if (err instanceof CustomError) {
console.log(err.aPropThatIndeedExistsInCustomError); //works
console.log(err.aPropThatDoesNotExistInCustomError); //error as expected
} else {
console.log(err); // this could still happen
}
}

例如,这是我对 CustomError 的邪恶实现:

class CustomError extends Error {
constructor() {
super()
throw new Error('Not so fast!'); // The evil part is here
}
aPropThatIndeedExistsInCustomError: string;
}

在这种情况下,err不是 CustomError。我知道,这可能不会发生,但重点是编译器不会自动为您缩小范围。如果您完全确定类型,则可以分配给另一个变量:

try {
throw new CustomError();
}
catch (_err) {
const err: CustomError = _err;
console.log(err.aPropThatDoesNotExistInCustomError); // errors as desired
}

但请记住,如果您弄错了类型,您可能会在运行时遇到麻烦。

祝你好运!

P.S.:参见 TypeScript 问题 #8677#9999想要查询更多的信息。

关于typescript - 缩小捕获中的错误类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45379959/

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