如何在typescript中区分具有相同结构的不同异常/类
我知道Typescript已经成功了。但是对于我的用例,我需要区分具有相同结构的不同类型的异常。有没有简单的方法来完成它?我正在考虑在每个字段中添加一些独特的字段,但我更喜欢只需要更改父错误的解决方案如何在typescript中区分具有相同结构的不同异常/类,typescript,error-handling,Typescript,Error Handling,我知道Typescript已经成功了。但是对于我的用例,我需要区分具有相同结构的不同类型的异常。有没有简单的方法来完成它?我正在考虑在每个字段中添加一些独特的字段,但我更喜欢只需要更改父错误的解决方案 class FooError extends Error {}; class BarError extends Error {}; function doSomething(): void | FooError { return new BarError(); } 为了实现这一
class FooError extends Error {};
class BarError extends Error {};
function doSomething(): void | FooError {
return new BarError();
}
为了实现这一点,您的子类需要在结构上彼此不同。您不能通过只修改父类来实现这一点 为了将子类彼此区分开来,您可以向每个子类添加一个
private
或protected
字段。私有字段是名义上处理的,而不是结构上处理的,因此如果需要,它们甚至可以具有相同的结构:
class FooError extends Error {
private __prop?: any; // needs to be in each subclass, despite looking the same
};
class BarError extends Error {
private __prop?: any; // needs to be in each subclass, despite looking the same
};
function doSomething(): void | FooError {
return new BarError(); // error
}
但我建议改为添加一个有区别的字段,如下所示:
class FooError extends Error {
readonly type = "FooError";
};
class BarError extends Error {
readonly type = "BarError";
};
function doSomething(): void | FooError {
return new BarError(); // error
}
因为您可以在编译时和运行时使用它来区分foorerror
和BarError
:
function distinguishError(err: FooError | BarError) {
if (err.type === "BarError") {
err // BarError
} else {
err // FooError
}
}
如果不改变每个子类的结构,就无法区分它们。所以,如果你想让它起作用,你必须做一些类似的事情。