Наблюдаемый ‹Any› запускает TSLint «свойство не существует»

У меня есть этот блок кода:

this._auth.getToken().flatMap(token => {
  return this._http.post("/authenticate");
}).flatMap(res => {
  let headers = new Headers();
  headers.append("Content-Type", "application/json");
  headers.append("Authorization", res.json().Token);
  return this._http.get(this.endpoints[endpoint], {headers: headers});
});

http.get и http.post возвращают Observable ‹Response›, который содержит метод .json.

Однако flatMap возвращает Observable ‹Any›, который не содержит метода .json.

Он работает правильно, но TSlint жалуется:

Свойство json не существует для типа {}. В строке 32 столбец 49

Я делаю что-то неправильно? Ожидается ли это? Это не имеет большого значения, но, возможно, это симптом более серьезных проблем в коде.


person Matteo Suppo    schedule 26.12.2015    source источник
comment
Попробуйте с .flatMap((res: Response) => ...)   -  person Eric Martinez    schedule 26.12.2015
comment
Оно работает! Спасибо. Почему бы тебе не опубликовать это как ответ?   -  person Matteo Suppo    schedule 27.12.2015
comment
Я разместил это как ответ, как вы предложили. Мне интересно узнать, какую версию вы используете (как angular2, так и TS), какие из них вы используете?   -  person Eric Martinez    schedule 27.12.2015
comment
angular2: 2.0.0-beta.0 машинописный текст: ^ 1.7.3 rxjs: 5.0.0-beta.0 tslint: ^ 3.1.1   -  person Matteo Suppo    schedule 27.12.2015


Ответы (1)


Чтобы решить эту проблему, вы должны добавить Response в качестве типа возвращаемого значения.

flatMap((res: Response) => {
  let headers = new Headers();
  headers.append("Content-Type", "application/json");
  headers.append("Authorization", res.json().Token);
  return this._http.get(this.endpoints[endpoint], {headers: headers});
});

Примечание

Это уже было исправлено, проверьте этот комментарий, так что вы не должны в последней версии. Я тестировал его с помощью beta.0, и мне не удалось воспроизвести это сообщение, даже не добавив Response в качестве типа.

Ссылка

person Eric Martinez    schedule 26.12.2015