TypeScript / React扫描操作符如何在currentvalue = function interface中工作?

时间:2018-05-17 22:24:45

标签: reactjs function typescript rxjs accumulator

我有一个带有以下参数的扫描运算符:

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

我的问题是return x(acc)实际返回的是什么?累加器function如何在这种特殊情况下工作? 我是TypeScript和lambda表达式的新手,所以非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在这种情况下,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);