Как мне трубу / карту, чтобы вернуть массив в Angular 7 - PullRequest
0 голосов
/ 10 ноября 2018

Когда я выполняю GET-вызов через HttpClient, я хочу передать обратно массив фактически типизированных объектов, а не просто общий «объект», и поэтому я попытался сделать это:

getExistingArsByLab(labId: number): Observable<EhsAssessmentAr[]> {
    return this.http
        .get<EhsAssessmentAr[]>(`${this.baseUrl}/ar?labId=${labId}`)
        .pipe(
            map(x => {
                const ret = EhsAssessmentAr.fromJson(x);
                ret.ar = this.sanitizer.sanitize(SecurityContext.HTML, ret.ar.replace(/\n/g, '<br/>'));
                return ret;
            })
        )
}

Этот fromJson метод объявлен как возвращающий правильный класс, и я подумал, что, поскольку я отправлял это через map, я должен был вернуть массив.Я ДЕЙСТВИТЕЛЬНО новичок в RxJ, поэтому я уверен, что просто делаю что-то совершенно глупое.

Я получаю ошибку:

TS2322: Тип 'Наблюдаемый 'нельзя назначить типу' Observable`

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Это уже стандартное поведение Angular 7 HttpClient.Поэтому, если вам не требуется дополнительная обработка html или чего-то подобного в вашем примере, вам просто нужно следующее:

getExistingArsByLab(labId: number): Observable<EhsAssessmentAr[]> {
  return this.http
    .get<EhsAssessmentAr[]>(`${this.baseUrl}/ar?labId=${labId}`)
}
0 голосов
/ 10 ноября 2018

Вы можете строго набрать свое отображение ответ и проверить, что вы возвращаете массив не один элемент:

getExistingArsByLab(labId: number): Observable<EhsAssessmentAr[]> {
    return this.http
        .get<EhsAssessmentAr[]>(`${this.baseUrl}/ar?labId=${labId}`)
        .pipe(
            map((x:EhsAssessmentAr[]) => {
                const ret = EhsAssessmentAr.fromJson(x);
                ret.ar = this.sanitizer.sanitize(SecurityContext.HTML, ret.ar.replace(/\n/g, '<br/>'));
                return ret;
            })
        )
}

Pro-tip 2: Если вы по какой-либо причине меняете тип возврата, вы можете использовать:

return <TypedArray[]> arrParsed["something"];

Pro-tip 3: Angular ненавидит то, что вы кормите его html, поэтому вам нужно найти какое-нибудь классное решение, например, при добавлении замены токена в новую строку

...