Я пытаюсь реализовать typeahead с помощью ng-bootstrap в моем приложении. Я следую примеру википедии , где он выбирает данные с помощью сервиса Wikipedia.
Я реализовал нечто подобное в своем приложении, но у меня проблема несоответствия типов в функции switchMap
из rxjs
.
Пример из ng-bootstrap:
search = (text$: Observable<string>) =>
text$.pipe(
debounceTime(300),
distinctUntilChanged(),
tap(() => this.searching = true),
switchMap(term =>
this._service.search(term).pipe(
tap(() => this.searchFailed = false),
catchError(() => {
this.searchFailed = true;
return of([]);
}))
),
tap(() => this.searching = false)
)
Моя проблема в том, что когда я пытаюсь реализовать это, term
в switchMap
представляет собой Observable<{}>
, а не string
, поэтому я не могу передать его своему сервису.
Как я могу получить действительное значение от наблюдаемого, чтобы передать его на обслуживание?
Моя версия:
search = (text$: Observable<string>) =>
text$.pipe(
debounceTime(300),
distinctUntilChanged(),
tap(() => this.searching = true),
switchMap(term =>
this.placeService.search(term).pipe( // [ts] Argument of type 'Observable<{}>' is not assignable to parameter of type 'string'.
tap(() => this.searchFailed = false),
catchError(() => {
this.searchFailed = true;
return of([]);
})
),
tap(() => this.searching = false))
)
Обновление 1
Демонстрация StackBlitz . Если вы посмотрите на app\app.component.ts
, вы получите сообщение об ошибке TS.