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

时间:2017-10-03 12:00:35

标签: angular typescript

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:any,因为console.log('错误',错误);打印Error Uncaught (in promise): [object Object],因为错误对象的类型是any。

如何在handleError(error:any)

中将错误对象更改为ERROR

1 个答案:

答案 0 :(得分:0)

Typescript不会在运行时进行类型检查。由于Error IS anyany仅表示任何对象'),使用handleError(error: any)对象调用Error完全有效

有点像"选择退出"在翻译成javascript时的类型检查。

所以当你说:"打印错误未捕获(在承诺中):[object Object]作为错误对象的类型是任何。",很可能是" any"输入IS实际上是一个错误。当您将对象打印到控制台时,它总是看起来像[object Object](除非您的控制台有一些很好的解析,如Chrome的控制台,它会显示一个交互式对象)。如果你想要json:做error.toJSON(),你就会看到错误对象中的所有字段,并能够判断它是否真的是Error

我怀疑你想要做的事情是:

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

我不知道错误的哪些字段在我的头顶。如果您不这样做,则可以使用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!');
  }
}