有人可以解释为什么以下代码的error instanceof CustomError
部分是false
吗?
class CustomError extends Error {}
const error = new CustomError();
console.log(error instanceof Error); // true
console.log(error instanceof CustomError); // false ???
class ParentClass {}
class ChildClass extends ParentClass { }
const child = new ChildClass();
console.log(child instanceof ParentClass); // true
console.log(child instanceof ChildClass); // true
关于Error对象有什么特别之处吗?我想制作我自己可以检查的错误类型。
顺便说一下,我已经在最新TypeScript Playground
上检查了上述代码答案 0 :(得分:1)
原来在TypeScript@2.1中引入了一种破坏这种模式的变化。整个重大变化描述为here。
总的来说,即使采用这个方向也似乎太复杂/错误。
拥有自己的错误对象并将原始Error
保留为属性可能更好:
class CustomError {
originalError: Error;
constructor(originalError?: Error) {
if (originalError) {
this.originalError = originalError
}
}
}
class SpecificError extends CustomError {}
const error = new SpecificError(new Error('test'));
console.log(error instanceof CustomError); // true
console.log(error instanceof SpecificError); // true