typescript - 继承自错误中断 `instanceof` 检查 TypeScript

标签 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 上检查了上面的代码

最佳答案

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

关于typescript - 继承自错误中断 `instanceof` 检查 TypeScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43912118/

相关文章:

javascript - 使用多个 Math.pow 将 Excel 公式转换为 Javascript

javascript - 将 const 函数代码从 JSX 转换为 TSX

angular - 如果变量 {{image}} 为空,则定义默认图像

java - 子类中的 super 构造函数 - Java

c# - 如果派生类没有参数化构造函数,如何从派生类调用基类的参数化构造函数?

在定义返回接口(interface)的函数时,Typescript 的行为似乎不一致

c# - 正确渲染覆盖的 TreeView

javascript - 在 mapstart 上隐藏单个标记组

javascript - 我可以将数组的切片转换为其他类型吗?

.net - 使用 [Type].Parse 还是 C[Type] 更好