TypeScript 中的自定义错误类

新手上路,请多包涵

我想在 TypeScript 中创建自己的错误类,扩展核心 Error 以提供更好的错误处理和自定义报告。例如,我想创建一个 HttpRequestError 类,并将 url、响应和正文传递到其构造函数中,该类以 Http request to http://example.com failed 和状态码 500 和消息进行响应:Something went错误 和正确的堆栈跟踪。

如何在 TypeScript 中扩展核心错误类?我已经在 SO: How do I extend a host object (eg Error) in TypeScript 中找到了帖子,但这个解决方案对我不起作用。我使用 TypeScript 1.5.3

有任何想法吗?

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

阅读 1.2k
2 个回答

TypeScript 2.1 对扩展内置插件(如 Error)进行了重大更改。

来自 TypeScript 重大更改文档

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

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

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

然后你可以使用:

 let error = new FooError("Something really bad went wrong");
if(error instanceof FooError){
   console.log(error.sayHello());
}

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

我正在使用 TypeScript 1.8 ,这就是我使用自定义错误类的方式:

意外输入.ts

 class UnexpectedInput extends Error {

  public static UNSUPPORTED_TYPE: string = "Please provide a 'String', 'Uint8Array' or 'Array'.";

  constructor(public message?: string) {
    super(message);
    this.name = "UnexpectedInput";
    this.stack = (<any> new Error()).stack;
  }

}

export default UnexpectedInput;

MyApp.ts

 import UnexpectedInput from "./UnexpectedInput";

...

throw new UnexpectedInput(UnexpectedInput.UNSUPPORTED_TYPE);

对于早于 1.8 的 TypeScript 版本,您需要声明 Error

 export declare class Error {
  public message: string;
  public name: string;
  public stack: string;
  constructor(message?: string);
}

原文由 Benny Neugebauer 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Stack Overflow 翻译
子站问答
访问
宣传栏