TypeScript / React, как работает оператор сканирования, где currentvalue = интерфейс функции? - PullRequest
0 голосов
/ 18 мая 2018

У меня есть оператор сканирования со следующими аргументами:

.scan(function (acc:Message[], x: (msg: Message[]) => Message[]){ return x(acc); }, initialMessages)

мой вопрос: что на самом деле возвращает return x(acc)?как аккумулятор function работает в этом конкретном случае?Я довольно новичок в TypeScript и лямбда-выражениях, поэтому любая помощь очень ценится.

1 Ответ

0 голосов
/ 20 мая 2018

В этом случае тип 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...