Я учу rxjs в угловых. Я загрузил проект из учебника, и один класс не может скомпилироваться. Я пытался исправить это, предполагая, что какая-то библиотека эволюционировала, но мне это не удалось. Я упростил код до минимума и до сих пор не могу понять, почему я получаю ошибку. Это ошибка машинописного текста, передаваемая через Intellij IDE.
Я получаю сообщение об ошибке в строке 7 ниже:
import { flatMap, map } from 'rxjs/operators';
import { Observable, of } from 'rxjs';
export class TestClass {
a$ = of('dummy').pipe( // Observable<string>
flatMap(s => of(s)), // Observable<string>
map<string, string>(s => s) // Observable<string> <-- ERROR HERE
);
b$ = of('dummy').pipe( // Observable<string>
flatMap(s => of(s)), // Observable<string> or Observable<Observable<string>> ?
map<Observable<string>, Observable<string>>(os => os)
);
}
map()
просто посмотреть, какой тип ожидается после flatMap()
.
Насколько я понимаю flatMap, у вас есть Observable<T>
на входе, вы отображаете каждый элемент T
на Observable<T>
, а flatMap выравнивает всю спину до Observable<T>
.
Но в $ есть ошибка.
Пока b $ компилируется нормально. Кажется, что flatMap
не выравнивает содержимое и выдает Observable<Observable<T>>
. Следующая map()
ожидает Observable<T>
как элементы.
Так что же происходит? Есть ли что-то, чего я не понял в flatMap()
или pipe()
? Или что-то смешное происходит с моим компилятором или моей IDE, и я получаю ошибочные сообщения об ошибках?
Обновление
В конце концов, это была проблема с набором текста, дающимфальшивая ошибкаИ моя уверенность в моем понимании функционального программирования восстанавливается.