Как преобразовать ответ http.get (), чтобы компонент мог напрямую использовать результат - PullRequest
0 голосов
/ 11 апреля 2019

Я хочу преобразовать результат выборки данных, чтобы он был готов к использованию компонентом.

  • Ответ возвращается как объект.

  • Мне нужно спроецировать свойство keywords объекта, оно содержит массив объектов:

interface GetKeywordsResponse {
   business : BusinessObj, 
   keywords : Array<KeywordObj>
}
  • Для каждого объектав массиве я хочу проецировать свойство keyword
interface KeywordObj {
 id: number,
 keyword: string
 }

Предоставляя мне массив строк: //['foo', 'bar']

Я понимаю, что мне нужно pipe()и map() для достижения этой цели.Но мое решение - генерировать ошибки типа.

Метод обслуживания:

public getKeywords(): Observable<Array<string>>  {
    return this.http.get<Observable<GetKeywordsResponse>>(...url).pipe(
      map((res: GetKeywordsResponse): Array<KeywordObj> => res.keywords),
      map((res: KeywordObj): Array<string> => res.keyword )
  }

Я ожидаю, что метод будет работать без проблем.Однако я сталкиваюсь с двумя ошибками:

1. Argument of type 'OperatorFunction<GetKeywordsResponse, KeywordObj[]>' is not assignable to parameter of type 'OperatorFunction<Observable<GetKeywordsResponse>, KeywordObj[]>'.
 Type 'GetKeywordsResponse' is missing the following properties from type 'Observable<GetKeywordsResponse>': _isScalar, source, operator, lift, and 6 more.

2. Type 'string' is not assignable to type 'string[]'.

Как я могу исправить getKeywords ()?

1 Ответ

0 голосов
/ 11 апреля 2019
public getKeywords(): Observable<string[]>  {
   return this.http.get(`${this.uri}/businesses/${this.businessId}/keywords`).pipe(
     map((res: GetKeywordsResponse): Array<KeywordObj> => res.keywords),
     map((arr: Array<KeywordObj>): string[] => arr.map((obj: KeywordObj): string => obj.keyword)))
 }
  • Вход для 2-й карты возвращал массив объектов. Я сделал ошибку, думая, что это был элемент в массиве объектов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...