虽然我返回false,但是控制台调试器显示这是UIError对象。尽管如此:
exception.originalException instanceOf UIError
返回false!我在调试器中看到它确实是一个UIError类。为什么?
UIError扩展了错误类
private isAnUIError(exception: any): boolean {
return (exception.originalException) instanceof UIError || exception instanceof UIError;
}
export class UIError extends Error {
constructor (private message: string) {
super();
this.message = message;
}
答案 0 :(得分:0)
如果打字稿像Babel ES6那样Error
不能像普通类一样扩展。这是JavaScript中令人讨厌的疣。解决方法是直接管理新错误的原型。我在another SO Answer中对ES6和Babel的解释进行了解释。
以下是我希望看到的内容:
class UIError {
constructor(message) {
this.name = 'UIError';
this.message = message;
this.stack = new Error().stack; // Optional
}
}
UIError.prototype = Object.create(Error.prototype);
请注意super()
对Error
不执行任何操作,因为Error
不是典型的构造函数(类)。这意味着无需执行
Error.apply(this, [].slice.call(arguments, 0))
(这基本上是super()
的作用),因为Error()
函数不会对this
执行任何操作,而是返回新的错误。这是关于JavaScript中Error
的一个警告。