类型'“”|中不存在属性“错误”许<任何>”

时间:2017-04-17 14:50:55

标签: angular typescript

我正在尝试按照Angular guide向服务添加一些错误处理。

相关摘要:

private handleError (error: Response | any) {
  // In a real world app, you might use a remote logging infrastructure
  let errMsg: string;
  if (error instanceof Response) {
    const body = error.json() || '';
    const err = body.error || JSON.stringify(body);
    errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
  } else {
    errMsg = error.message ? error.message : error.toString();
  }
  console.error(errMsg);
  return Observable.throw(errMsg);
}

但是,我收到了一个TypeScript错误:

error TS2339: Property 'error' does not exist on type '"" | Promise<any>'. Property 'error' does not exist on type '""'.

我可以理解为什么正在发生 - error.json()返回Promise<any>,然后body.error的后续行无效,因为没有{ {1}}财产。但是,似乎应该期望从error返回JSON对象。为什么会这样,而我错过了Angular指南不是什么?

3 个答案:

答案 0 :(得分:25)

同样的事发生在我身上。无法导入Response对象时会发生这种情况。

import { Response } from '@angular/http';

答案 1 :(得分:0)

不,因为你写了:

,它不会起作用
const body = error.json() || '';

这意味着body可以是空字符串,而字符串不具有error属性。

这应该更好:

const body = error.json() || { error: null };

修改

哦,error.json()会返回Promise,这意味着您无法使用此同步块,而是您需要:

error.json().then(body => {
    if (!body) {
        body = "";
    }

    const err = body.error || JSON.stringify(body);
    const errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
});

答案 2 :(得分:0)

我有同样的问题,我终于找到了这个解决方案。

&#13;
&#13;
.catch(error => {
  let errMsg: string;
  const body = JSON.parse(error._body);
  if (body) {
    errMsg = body.error
  } else {
    errMsg = error.message ? error.message : error.toString();
  }
  console.error(errMsg);
  return Promise.reject(errMsg);
});
&#13;
&#13;
&#13;