Свойство 'error' не существует для типа '"" / Promise '
Я пытаюсь добавить некоторую обработку ошибок в службу, следуя угловому руководство.
соответствующий фрагмент:
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
не будет работать, потому что нет error
собственность. Однако, похоже, следует ожидать, что объект JSON быть возвращенным из .json()
. Почему это, и что мне не хватает, что угловой направляющий не является?
3 ответов
то же самое случилось со мной. Это происходит, когда не удается импортировать объект Response.
import { Response } from '@angular/http';
нет, это не сработает, потому что ты написал:
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}`;
});
У меня была такая же проблема, я, наконец, нашли это решение.
.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);
});