网站搜索

angular - 如何将类型为 any 的错误更改为类型为 Error 的错误?


import {NgModule, ErrorHandler} from '@angular/core';

class MyErrorHandler implements ErrorHandler {
  handleError(error:any) {  
    // do something with the exception
     console.log('Error',error);
  }
}

我正在使用 ErrorHandler 来捕获生成的异常。捕获的错误类型是 ERROR,但在此类中 error 的类型是 error:any,因此 console.log('Error', error); 会打印 Error Uncaught (in promise): [object Object],因为错误对象的类型是 any。

我如何能够在 handleError(error:any) 中将 error 对象改为 ERROR?

答案#1

Typescript 在运行时不会进行类型检查。由于 Error 是 any(any 仅意味着“任何对象”),使用 Error 对象调用 handleError(error: any) 是完全有效的。

这有点像在转译成 JavaScript 的过程中“选择退出”类型检查。

所以当你说:“打印出 Error Uncaught (in promise): [object Object],因为错误对象的类型是 any。”时,很可能这个 “any” 类型实际上确实是一个 Error。当你将一个对象打印到控制台时,它总是显示为 [object Object](除非你的控制台有一些很好的解析功能,比如 Chrome 的控制台,它会显示一个可交互的对象)。如果你想要 JSON 格式:使用 error.toJSON(),你就能看到错误对象中的所有字段,并且能够判断它是否确实是一个 Error。

我怀疑你想做的事情大概是这样的:

console.log('Error', error.message);

我一时想不起来 Error 有哪些字段。如果你也不知道,你可以使用 as 命令在编写代码时让事情变得简单:

handleError(e: any) {  
  // do something with the exception
  const error as Error;
  console.log('Error', error.message);
}

当然,如果有人在非 Error 对象(或者没有 message 的对象)上使用它,它就会出错,因此最好进行检查:

handleError(e: any) {  
  // do something with the exception
  const error as Error;
  if (error.message) {
      console.log('Error', error.message);
  } else {
     console.log('Unspecified error!');
  }
}