打字稿 \- 扩展错误类

新手上路,请多包涵

我正在尝试使用控制台中打印的“CustomError”类名而不是“Error”来引发自定义错误,但没有成功:

 class CustomError extends Error {
    constructor(message: string) {
      super(`Lorem "${message}" ipsum dolor.`);
      this.name = 'CustomError';
    }
}
throw new CustomError('foo');

输出为 Uncaught Error: Lorem "foo" ipsum dolor

我的期望: Uncaught CustomError: Lorem "foo" ipsum dolor

我想知道这是否可以仅使用 TS 来完成(不会弄乱 JS 原型)?

原文由 darksoulsong 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 721
2 个回答

您是否使用 typescript 2.1 版并转译为 ES5?检查重大更改页面的此部分以了解可能的问题和解决方法: https ://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array- 和地图可能不再工作

相关位:

作为建议,您可以在任何 super(…) 调用后立即手动调整原型。

 class FooError extends Error {
    constructor(m: string) {
        super(m);

        // Set the prototype explicitly.
        Object.setPrototypeOf(this, FooError.prototype);
    }

    sayHello() {
        return "hello " + this.message;
    }
}

但是,FooError 的任何子类也必须手动设置原型。对于不支持 Object.setPrototypeOf 的运行时,您可以改为使用 __proto__

不幸的是,这些变通方法不适用于 Internet Explorer 10 和更早版本。可以手动将原型中的方法复制到实例本身(即 FooError.prototype 到 this 上),但原型链本身无法修复。

原文由 Vidar 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在 nodejs 服务器中遇到了这个问题。对我有用的是转换到 es2017,其中这些问题似乎已得到解决。

编辑 tsconfig 到


    "target": "es2017"

原文由 user12575927 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题