TypeScript 中的异常嵌套/包装

Kar*_*pka 7 javascript error-handling exception-handling exception typescript

在 TypeScript 中嵌套/包装异常(原因)是否可能/常见做法,例如在 Java 中?

try {
  // do something
} catch (e) {
  throw new MyException("Exception while doing something", e);
}
Run Code Online (Sandbox Code Playgroud)

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

Nit*_*mer 1

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

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

    return new Error(typeof e === "string" ? e : e.toString());
}
Run Code Online (Sandbox Code Playgroud)

进而:

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

这将打印类似的内容:

错误:1,字符串,true
,正常化错误(:5:12)
,时间:11:9

如果您有目标es6,那么您可以扩展该类Error而不是使用此normalizeError函数,但如果您不能目标es6,那么您应该避免扩展本机类。