从Error中继承`instanceof`检查TypeScript

时间:2017-05-11 09:55:09

标签: typescript inheritance types instanceof

有人可以解释为什么以下代码的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

上检查了上述代码

1 个答案:

答案 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