首页 > 解决方案 > 打字稿中等效的Java方法引用运算符(双冒号)

问题描述

打字稿中Java双冒号运算符的等价物是什么(如果有的话):

stream.forEach( System.out::println(s));

编辑:我知道它对某些功能是可行的,例如:

stream.forEach(console.log);
stream.filter(Boolean);

但是当我使用其他功能时,例如 BehaviorSubject “next”,我的代码会中断。我不知道有什么资格让其他两个被引用调用。我想要类似的东西:

stream.pipe(someSubject.next);

代替:

stream.pipe(value => someSubject.next(value));

标签: typescriptrxjs

解决方案


好的,所以我做了一些搜索,在 JScript 中有一个双冒号运算符,这是微软对 JavaScript 的实现:

双冒号用作脚本 ID 和事件名称之间的分隔符

我的猜测是这不是 Internet Explorer 的 ECMAScript 实现的一部分(或不再是一部分),但它属于(或曾经属于)Microsoft Office 的实现

'::'(双冒号)在 javascript 中对事件有什么作用?

这是一个非常酷的发现,但我从未见过在 TS 或 ECMAScript 中使用双冒号运算符。您可以使用 lambda 表达式 [].forEach((item: any) => console.log(item))

但我很确定 JS 或 TS 没有像 Java 那样的 lambda 表达式包装器。

编辑:我还发现了这个What does '::' (double Colon) do in JavaScript? 经过多一点搜索,它也是一个有效的 ES7 运算符作为绑定的语法糖:http: //blog.jeremyfairbank.com/javascript/javascript-es7-function-bind-syntax/

尽管它的行为方式与 Java 的 :: 运算符不同。


推荐阅读