Inherit from Error 中断了 TypeScript 中的 `instanceof` 检查

Ada*_*myd 6 inheritance types instanceof typescript

有人可以解释我为什么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
Run Code Online (Sandbox Code Playgroud)

Error 对象有什么特别之处吗?我想制作我自己可以检查的错误类型。

顺便说一句,我已经在最新的TypeScript Playground上检查了上面的代码

Ada*_*myd 6

结果证明在TypeScript@2.1中引入了一项改变,打破了这种模式。此处描述整个重大变化。

一般来说,即使按照这个方向走似乎也太复杂/错误了。

拥有自己的错误对象并保留一些原始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
Run Code Online (Sandbox Code Playgroud)