В этом случае тип x(acc)
будет Message[]
.Вы можете сказать это по сигнатуре второго аргумента x
, который возвращает Message[]
.
Обычно scan()
принимает функцию (acc, val) => ...
с аккумулятором и значением.и испускает возвращаемое значение.В этом случае выбрасываемое значение val
, поступающее в оператор сканирования, является замыканием.это немного необычно, но прекрасно.Пример, который выводит
[ 1, 2, 3 ]
[ 3, 4, 5 ]
[ 4, 5, 6 ]
... будет:
import { Observable } from 'rxjs/Rx';
type Message = number;
function scanFn(acc: Message[], x: (msg: Message[]) => Message[]): Message[] {
return x(acc);
}
function mapFn(val: Message): (msg: Message[]) => Message[] {
return x => x.map((y, i) => val + i);
}
Observable.from([1, 3, 4])
.map(mapFn)
.scan(scanFn, [1, 2, 3])
.subscribe(console.log);