有人能解释一下为什么下面代码的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

错误对象有什么特别的地方吗?我想做我自己的错误类型,我可以检查。
顺便说一下,我已经在最新的TypeScript Playground

最佳答案

原来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

07-25 23:53