【问题标题】:Exception nesting/wrapping in TypeScriptTypeScript 中的异常嵌套/包装
【发布时间】:2017-09-24 09:31:53
【问题描述】:

是否可以像在 Java 中一样在 TypeScript 中嵌套/包装异常(原因)?

try {
  // do something
} catch (e) {
  throw new MyException("Exception while doing something", e);
}

我的意思是,为 MyException 提供一个自定义 ctor,将 e 参数作为 cause 传递可能不是问题,但是稍后报告(打印)堆栈跟踪呢?

【问题讨论】:

  • 问题是你不知道e是什么类型。在 javascript 中,您可以throw 任何东西:数字、字符串、错误、数组等。但是您在代码中所做的一切都很好。我为throws clause and typed catch clause 请求了一个功能,这将使它更容易(在我看来)
  • 谢谢。赞成。如果您可以进行运行时检查,如果e 是一个异常,然后能够提取其堆栈跟踪以供以后报告/打印(a'la printStackTrace),该怎么办?是否存在这样的模式/代码?
  • @KarolDepka console.log(e instanceof Error, e.stack);

标签: javascript exception typescript error-handling exception-handling


【解决方案1】:

如果您正在寻找堆栈跟踪,那么您可以这样做:

function normalizeError(e: any): Error {
    if (e instanceof Error) {
        return e;
    }

    return new Error(typeof e === "string" ? e : e.toString());
}

然后:

try {
    throw [1, "string", true];
}
catch (e) {
    e = normalizeError(e);
    console.log(e.stack);
}

将打印如下内容:

错误:1,字符串,真
在 normalizeError (:5:12)
在:11:9

如果您的目标是es6,那么您可以扩展Error 类而不是拥有这个normalizeError 函数,但如果您不能定位es6,那么您应该避免扩展本机类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2019-10-02
    • 2015-06-06
    • 2014-06-03
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多